home *** CD-ROM | disk | FTP | other *** search
/ Chip 2004 May / CMCD0504.ISO / Software / Freeware / Programare / dspack / DSPACK231.exe / {app} / src / DirectX9 / DirectInput.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  2003-01-26  |  318.8 KB  |  6,525 lines

  1. {******************************************************************************}
  2. {*                                                                            *}
  3. {*  Copyright (C) Microsoft Corporation.  All Rights Reserved.                *}
  4. {*                                                                            *}
  5. {*  Files:      dinput.h                                                      *}
  6. {*  Content:    DirectInput include file                                      *}
  7. {*                                                                            *}
  8. {*  DirectX 9.0 Delphi adaptation by Alexey Barkovoy                          *}
  9. {*  E-Mail: clootie@reactor.ru                                                *}
  10. {*                                                                            *}
  11. {*  Modified: 26-Jan-2003                                                     *}
  12. {*                                                                            *}
  13. {*  Compatible with :                                                         *}
  14. {*    DirectX 7.0 Object Pascal adaptation by                                 *}
  15. {*      Erik Unger, e-Mail: DelphiDirectX@next-reality.com                    *}
  16. {*                                                                            *}
  17. {*  Latest version can be downloaded from:                                    *}
  18. {*     http://clootie.narod.ru/delphi                                         *}
  19. {*                                                                            *}
  20. {******************************************************************************}
  21. {                                                                              }
  22. { Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI)        }
  23. {                                                                              }
  24. { The contents of this file are used with permission, subject to the Mozilla   }
  25. { Public License Version 1.1 (the "License"); you may not use this file except }
  26. { in compliance with the License. You may obtain a copy of the License at      }
  27. { http://www.mozilla.org/MPL/MPL-1.1.html                                      }
  28. {                                                                              }
  29. { Software distributed under the License is distributed on an "AS IS" basis,   }
  30. { WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
  31. { the specific language governing rights and limitations under the License.    }
  32. {                                                                              }
  33. { Alternatively, the contents of this file may be used under the terms of the  }
  34. { GNU Lesser General Public License (the  "LGPL License"), in which case the   }
  35. { provisions of the LGPL License are applicable instead of those above.        }
  36. { If you wish to allow use of your version of this file only under the terms   }
  37. { of the LGPL License and not to allow others to use your version of this file }
  38. { under the MPL, indicate your decision by deleting  the provisions above and  }
  39. { replace  them with the notice and other provisions required by the LGPL      }
  40. { License.  If you do not delete the provisions above, a recipient may use     }
  41. { your version of this file under either the MPL or the LGPL License.          }
  42. {                                                                              }
  43. { For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
  44. {                                                                              }
  45. {******************************************************************************}
  46.  
  47. // Original source contained in "DirectInput.par"
  48.  
  49. ///////////////////////////////////////////////////////////////////////////////
  50. // Notes:
  51. //----------------------------------------------------------------------------
  52. // Possible input defines for this file, mapped to original C values:
  53. //   DIRECTINPUT_VERSION_8 : DIRECTINPUT_VERSION = 0x0800,
  54. //   DIRECTINPUT_VERSION_7 : DIRECTINPUT_VERSION = 0x0700,
  55. //   DIRECTINPUT_VERSION_5b : DIRECTINPUT_VERSION = 0x05b2,
  56. //     - in this translation we don't support DirectInput 5.0a (0x050a) version
  57. //       - just straight 5.0b (0x05b2) one.
  58. //   DIRECTINPUT_VERSION_5 : DIRECTINPUT_VERSION = 0x0500,
  59. //   DIRECTINPUT_VERSION_3 : DIRECTINPUT_VERSION = 0x0300,
  60. //
  61. // By default DIRECTINPUT_VERSION_8 (DIRECTINPUT_VERSION = 0x0800) is assumed
  62. //
  63. // Also you can use generic DIRECTXx defines, so:
  64. //   DIRECTX9 equal to DIRECTINPUT_VERSION_8;
  65. //   DIRECTX8 equal to DIRECTINPUT_VERSION_8;
  66. //   DIRECTX7 equal to DIRECTINPUT_VERSION_7;
  67. //   DIRECTX6 equal to DIRECTINPUT_VERSION_5;
  68. //   DIRECTX5 equal to DIRECTINPUT_VERSION_5;
  69. //   DIRECTX3 equal to DIRECTINPUT_VERSION_3
  70. ///////////////////////////////////////////////////////////////////////////////
  71.  
  72. unit DirectInput;
  73.  
  74. interface
  75.  
  76. uses
  77.   Windows, MMSystem, DXTypes;
  78.  
  79. {$I DirectX.inc}
  80.  
  81. ////////////////////////////////////////////////////////////////////////
  82. // Global level dynamic loading support
  83. {$IFDEF DYNAMIC_LINK_ALL}
  84.   {$DEFINE DIRECTINPUT_DYNAMIC_LINK}
  85. {$ENDIF}
  86. {$IFDEF DYNAMIC_LINK_EXPLICIT_ALL}
  87.   {$DEFINE DIRECTINPUT_DYNAMIC_LINK_EXPLICIT}
  88. {$ENDIF}
  89.  
  90. // Remove "dots" below to force some kind of dynamic linking
  91. {.$DEFINE DIRECTINPUT_DYNAMIC_LINK}
  92. {.$DEFINE DIRECTINPUT_DYNAMIC_LINK_EXPLICIT}
  93.  
  94. ////////////////////////////////////////////////////////////////////////
  95. // Assume for what DirectInput version we will compile headers
  96. {$IFDEF DIRECTX9}
  97.   {$DEFINE DIRECTINPUT_VERSION_8}
  98. {$ENDIF}
  99. {$IFDEF DIRECTX8}
  100.   {$DEFINE DIRECTINPUT_VERSION_8}
  101. {$ENDIF}
  102. {$IFDEF DIRECTX7}
  103.   {$DEFINE DIRECTINPUT_VERSION_7}
  104. {$ENDIF}
  105. {$IFDEF DIRECTX6}
  106.   {$DEFINE DIRECTINPUT_VERSION_5}
  107. {$ENDIF}
  108. {$IFDEF DIRECTX5}
  109.   {$DEFINE DIRECTINPUT_VERSION_5}
  110. {$ENDIF}
  111. {$IFDEF DIRECTX3}
  112.   {$DEFINE DIRECTINPUT_VERSION_3}
  113. {$ENDIF}
  114.  
  115. {$IFNDEF DIRECTINPUT_VERSION_8}
  116.   {$IFNDEF DIRECTINPUT_VERSION_7}
  117.     {$IFNDEF DIRECTINPUT_VERSION_5b}
  118.       {$IFNDEF DIRECTINPUT_VERSION_5}
  119.         {$IFNDEF DIRECTINPUT_VERSION_3}
  120. // Compiling for DirectInput8 by default
  121. {$DEFINE DIRECTINPUT_VERSION_8}
  122.         {$ENDIF}
  123.       {$ENDIF}
  124.     {$ENDIF}
  125.   {$ENDIF}
  126. {$ENDIF}
  127.  
  128. ////////////////////////////////////////////////////////////////////////
  129. // Define DirectInputVerrsion constant
  130. const
  131. {$IFDEF DIRECTINPUT_VERSION_8}
  132.   DIRECTINPUT_VERSION = $0800;
  133. {$ELSE}{$IFDEF DIRECTINPUT_VERSION_7}
  134.   DIRECTINPUT_VERSION = $0700;
  135. {$ELSE}{$IFDEF DIRECTINPUT_VERSION_5b}
  136.   DIRECTINPUT_VERSION = $05b2;
  137. {$ELSE}{$IFDEF DIRECTINPUT_VERSION_5}
  138.   DIRECTINPUT_VERSION = $0500;
  139. {$ELSE}{$IFDEF DIRECTINPUT_VERSION_3}
  140.   DIRECTINPUT_VERSION = $0300;
  141. {$ENDIF}{$ENDIF}{$ENDIF}{$ENDIF}{$ENDIF}
  142.   {$EXTERNALSYM DIRECTINPUT_VERSION}
  143.  
  144. ////////////////////////////////////////////////////////////////////////
  145. // Emit conditionals to C++Builder compiler
  146. {$IFDEF DIRECTINPUT_VERSION_3}
  147.   {$HPPEMIT '#define DIRECTINPUT_VERSION         0x0300'}
  148. {$ENDIF}
  149. {$IFDEF DIRECTINPUT_VERSION_5}
  150.   {$HPPEMIT '#define DIRECTINPUT_VERSION         0x0500'}
  151. {$ENDIF}
  152. {$IFDEF DIRECTINPUT_VERSION_5b}
  153.   {$HPPEMIT '#define DIRECTINPUT_VERSION         0x05b2'}
  154. {$ENDIF}
  155. {$IFDEF DIRECTINPUT_VERSION_7}
  156.   {$HPPEMIT '#define DIRECTINPUT_VERSION         0x0700'}
  157. {$ENDIF}
  158. {$IFDEF DIRECTINPUT_VERSION_8}
  159.   {$HPPEMIT '#define DIRECTINPUT_VERSION         0x0800'}
  160. {$ENDIF}
  161.  
  162. (*$NOINCLUDE DXTypes*)
  163. (*$HPPEMIT '#include "dinput.h"' *)
  164. (*$HPPEMIT '' *)
  165.  
  166. ////////////////////////////////////////////////////////////////////////
  167. // Define symbols for '<=' comparision
  168. {$IFDEF DIRECTINPUT_VERSION_8}
  169.   {$DEFINE DIRECTINPUT_VERSION_7}
  170. {$ENDIF}
  171. {$IFDEF DIRECTINPUT_VERSION_7}
  172.   {$DEFINE DIRECTINPUT_VERSION_5b}
  173. {$ENDIF}
  174. {$IFDEF DIRECTINPUT_VERSION_5b}
  175.   {$DEFINE DIRECTINPUT_VERSION_5}
  176. {$ENDIF}
  177. {$IFDEF DIRECTINPUT_VERSION_5}
  178.   {$DEFINE DIRECTINPUT_VERSION_3}
  179. {$ENDIF}
  180.  
  181. (****************************************************************************
  182.  *
  183.  *  Copyright (C) 1996-2000 Microsoft Corporation.  All Rights Reserved.
  184.  *
  185.  *  File:       dinput.h
  186.  *  Content:    DirectInput include file
  187.  *
  188.  ****************************************************************************)
  189.  
  190.  
  191. {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectInputEffect);'}
  192. {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectInputDeviceA);'}
  193. {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectInputDeviceW);'}
  194. {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectInputA);'}
  195. {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectInputW);'}
  196. {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectInput2A);'}
  197. {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectInput2W);'}
  198. {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectInput7A);'}
  199. {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectInput7W);'}
  200. {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectInput8A);'}
  201. {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectInput8W);'}
  202. {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectInputDeviceA);'}
  203. {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectInputDeviceW);'}
  204. {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectInputDevice2A);'}
  205. {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectInputDevice2W);'}
  206. {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectInputDevice7A);'}
  207. {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectInputDevice7W);'}
  208. {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectInputDevice8A);'}
  209. {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirectInputDevice8W);'}
  210. {$HPPEMIT '#ifdef UNICODE'}
  211. {$HPPEMIT 'typedef _di_IDirectInputW _di_IDirectInput;'}
  212. {$HPPEMIT 'typedef _di_IDirectInput2W _di_IDirectInput2;'}
  213. {$HPPEMIT 'typedef _di_IDirectInput7W _di_IDirectInput7;'}
  214. {$HPPEMIT 'typedef _di_IDirectInput8W _di_IDirectInput8;'}
  215. {$HPPEMIT 'typedef _di_IDirectInputDeviceW _di_IDirectInputDevice;'}
  216. {$HPPEMIT 'typedef _di_IDirectInputDevice2W _di_IDirectInputDevice2;'}
  217. {$HPPEMIT 'typedef _di_IDirectInputDevice7W _di_IDirectInputDevice7;'}
  218. {$HPPEMIT 'typedef _di_IDirectInputDevice8W _di_IDirectInputDevice8;'}
  219. {$HPPEMIT '#else'}
  220. {$HPPEMIT 'typedef _di_IDirectInputA _di_IDirectInput;'}
  221. {$HPPEMIT 'typedef _di_IDirectInput2A _di_IDirectInput2;'}
  222. {$HPPEMIT 'typedef _di_IDirectInput7A _di_IDirectInput7;'}
  223. {$HPPEMIT 'typedef _di_IDirectInput8A _di_IDirectInput8;'}
  224. {$HPPEMIT 'typedef _di_IDirectInputDeviceA _di_IDirectInputDevice;'}
  225. {$HPPEMIT 'typedef _di_IDirectInputDevice2A _di_IDirectInputDevice2;'}
  226. {$HPPEMIT 'typedef _di_IDirectInputDevice7A _di_IDirectInputDevice7;'}
  227. {$HPPEMIT 'typedef _di_IDirectInputDevice8A _di_IDirectInputDevice8;'}
  228. {$HPPEMIT '#endif'}
  229.  
  230.  
  231. (****************************************************************************
  232.  *
  233.  *      Class IDs
  234.  *
  235.  ****************************************************************************)
  236.  
  237. const
  238.   CLSID_DirectInput        : TGUID = '{25E609E0-B259-11CF-BFC7-444553540000}';
  239.   {$EXTERNALSYM CLSID_DirectInput}
  240.   CLSID_DirectInputDevice  : TGUID = '{25E609E1-B259-11CF-BFC7-444553540000}';
  241.   {$EXTERNALSYM CLSID_DirectInputDevice}
  242.  
  243.   CLSID_DirectInput8       : TGUID = '{25E609E4-B259-11CF-BFC7-444553540000}';
  244.   {$EXTERNALSYM CLSID_DirectInput8}
  245.   CLSID_DirectInputDevice8 : TGUID = '{25E609E5-B259-11CF-BFC7-444553540000}';
  246.   {$EXTERNALSYM CLSID_DirectInputDevice8}
  247.  
  248. (****************************************************************************
  249.  *
  250.  *      Interfaces
  251.  *
  252.  ****************************************************************************)
  253.  
  254. const
  255.   IID_IDirectInputA        : TGUID = '{89521360-AA8A-11CF-BFC7-444553540000}';
  256.   {$EXTERNALSYM IID_IDirectInputA}
  257.   IID_IDirectInputW        : TGUID = '{89521361-AA8A-11CF-BFC7-444553540000}';
  258.   {$EXTERNALSYM IID_IDirectInputW}
  259.   IID_IDirectInput2A       : TGUID = '{5944E662-AA8A-11CF-BFC7-444553540000}';
  260.   {$EXTERNALSYM IID_IDirectInput2A}
  261.   IID_IDirectInput2W       : TGUID = '{5944E663-AA8A-11CF-BFC7-444553540000}';
  262.   {$EXTERNALSYM IID_IDirectInput2W}
  263.   IID_IDirectInput7A       : TGUID = '{9A4CB684-236D-11D3-8E9D-00C04F6844AE}';
  264.   {$EXTERNALSYM IID_IDirectInput7A}
  265.   IID_IDirectInput7W       : TGUID = '{9A4CB685-236D-11D3-8E9D-00C04F6844AE}';
  266.   {$EXTERNALSYM IID_IDirectInput7W}
  267.   IID_IDirectInput8A       : TGUID = '{BF798030-483A-4DA2-AA99-5D64ED369700}';
  268.   {$EXTERNALSYM IID_IDirectInput8A}
  269.   IID_IDirectInput8W       : TGUID = '{BF798031-483A-4DA2-AA99-5D64ED369700}';
  270.   {$EXTERNALSYM IID_IDirectInput8W}
  271.   IID_IDirectInputDeviceA  : TGUID = '{5944E680-C92E-11CF-BFC7-444553540000}';
  272.   {$EXTERNALSYM IID_IDirectInputDeviceA}
  273.   IID_IDirectInputDeviceW  : TGUID = '{5944E681-C92E-11CF-BFC7-444553540000}';
  274.   {$EXTERNALSYM IID_IDirectInputDeviceW}
  275.   IID_IDirectInputDevice2A : TGUID = '{5944E682-C92E-11CF-BFC7-444553540000}';
  276.   {$EXTERNALSYM IID_IDirectInputDevice2A}
  277.   IID_IDirectInputDevice2W : TGUID = '{5944E683-C92E-11CF-BFC7-444553540000}';
  278.   {$EXTERNALSYM IID_IDirectInputDevice2W}
  279.   IID_IDirectInputDevice7A : TGUID = '{57D7C6BC-2356-11D3-8E9D-00C04F6844AE}';
  280.   {$EXTERNALSYM IID_IDirectInputDevice7A}
  281.   IID_IDirectInputDevice7W : TGUID = '{57D7C6BD-2356-11D3-8E9D-00C04F6844AE}';
  282.   {$EXTERNALSYM IID_IDirectInputDevice7W}
  283.   IID_IDirectInputDevice8A : TGUID = '{54D41080-DC15-4833-A41B-748F73A38179}';
  284.   {$EXTERNALSYM IID_IDirectInputDevice8A}
  285.   IID_IDirectInputDevice8W : TGUID = '{54D41081-DC15-4833-A41B-748F73A38179}';
  286.   {$EXTERNALSYM IID_IDirectInputDevice8W}
  287.   IID_IDirectInputEffect   : TGUID = '{E7E1F7C0-88D2-11D0-9AD0-00A0C9A06E35}';
  288.   {$EXTERNALSYM IID_IDirectInputEffect}
  289.  
  290.   // String constants for Interface IDs
  291.   SID_IDirectInputA        = '{89521360-AA8A-11CF-BFC7-444553540000}';
  292.   SID_IDirectInputW        = '{89521361-AA8A-11CF-BFC7-444553540000}';
  293.   SID_IDirectInput2A       = '{5944E662-AA8A-11CF-BFC7-444553540000}';
  294.   SID_IDirectInput2W       = '{5944E663-AA8A-11CF-BFC7-444553540000}';
  295.   SID_IDirectInput7A       = '{9A4CB684-236D-11D3-8E9D-00C04F6844AE}';
  296.   SID_IDirectInput7W       = '{9A4CB685-236D-11D3-8E9D-00C04F6844AE}';
  297.   SID_IDirectInput8A       = '{BF798030-483A-4DA2-AA99-5D64ED369700}';
  298.   SID_IDirectInput8W       = '{BF798031-483A-4DA2-AA99-5D64ED369700}';
  299.   SID_IDirectInputDeviceA  = '{5944E680-C92E-11CF-BFC7-444553540000}';
  300.   SID_IDirectInputDeviceW  = '{5944E681-C92E-11CF-BFC7-444553540000}';
  301.   SID_IDirectInputDevice2A = '{5944E682-C92E-11CF-BFC7-444553540000}';
  302.   SID_IDirectInputDevice2W = '{5944E683-C92E-11CF-BFC7-444553540000}';
  303.   SID_IDirectInputDevice7A = '{57D7C6BC-2356-11D3-8E9D-00C04F6844AE}';
  304.   SID_IDirectInputDevice7W = '{57D7C6BD-2356-11D3-8E9D-00C04F6844AE}';
  305.   SID_IDirectInputDevice8A = '{54D41080-DC15-4833-A41B-748F73A38179}';
  306.   SID_IDirectInputDevice8W = '{54D41081-DC15-4833-A41B-748F73A38179}';
  307.   SID_IDirectInputEffect   = '{E7E1F7C0-88D2-11D0-9AD0-00A0C9A06E35}';
  308.   
  309. (****************************************************************************
  310.  *
  311.  *      Predefined object types
  312.  *
  313.  ****************************************************************************)
  314.  
  315. const
  316.   GUID_XAxis   : TGUID = '{A36D02E0-C9F3-11CF-BFC7-444553540000}';
  317.   {$EXTERNALSYM GUID_XAxis}
  318.   GUID_YAxis   : TGUID = '{A36D02E1-C9F3-11CF-BFC7-444553540000}';
  319.   {$EXTERNALSYM GUID_YAxis}
  320.   GUID_ZAxis   : TGUID = '{A36D02E2-C9F3-11CF-BFC7-444553540000}';
  321.   {$EXTERNALSYM GUID_ZAxis}
  322.   GUID_RxAxis  : TGUID = '{A36D02F4-C9F3-11CF-BFC7-444553540000}';
  323.   {$EXTERNALSYM GUID_RxAxis}
  324.   GUID_RyAxis  : TGUID = '{A36D02F5-C9F3-11CF-BFC7-444553540000}';
  325.   {$EXTERNALSYM GUID_RyAxis}
  326.   GUID_RzAxis  : TGUID = '{A36D02E3-C9F3-11CF-BFC7-444553540000}';
  327.   {$EXTERNALSYM GUID_RzAxis}
  328.   GUID_Slider  : TGUID = '{A36D02E4-C9F3-11CF-BFC7-444553540000}';
  329.   {$EXTERNALSYM GUID_Slider}
  330.  
  331.   GUID_Button  : TGUID = '{A36D02F0-C9F3-11CF-BFC7-444553540000}';
  332.   {$EXTERNALSYM GUID_Button}
  333.   GUID_Key     : TGUID = '{55728220-D33C-11CF-BFC7-444553540000}';
  334.   {$EXTERNALSYM GUID_Key}
  335.  
  336.   GUID_POV     : TGUID = '{A36D02F2-C9F3-11CF-BFC7-444553540000}';
  337.   {$EXTERNALSYM GUID_POV}
  338.  
  339.   GUID_Unknown : TGUID = '{A36D02F3-C9F3-11CF-BFC7-444553540000}';
  340.   {$EXTERNALSYM GUID_Unknown}
  341.  
  342. (****************************************************************************
  343.  *
  344.  *      Predefined product GUIDs
  345.  *
  346.  ****************************************************************************)
  347.  
  348. const
  349.   GUID_SysMouse       : TGUID = '{6F1D2B60-D5A0-11CF-BFC7-444553540000}';
  350.   {$EXTERNALSYM GUID_SysMouse}
  351.   GUID_SysKeyboard    : TGUID = '{6F1D2B61-D5A0-11CF-BFC7-444553540000}';
  352.   {$EXTERNALSYM GUID_SysKeyboard}
  353.   GUID_Joystick       : TGUID = '{6F1D2B70-D5A0-11CF-BFC7-444553540000}';
  354.   {$EXTERNALSYM GUID_Joystick}
  355.   GUID_SysMouseEm     : TGUID = '{6F1D2B80-D5A0-11CF-BFC7-444553540000}';
  356.   {$EXTERNALSYM GUID_SysMouseEm}
  357.   GUID_SysMouseEm2    : TGUID = '{6F1D2B81-D5A0-11CF-BFC7-444553540000}';
  358.   {$EXTERNALSYM GUID_SysMouseEm2}
  359.   GUID_SysKeyboardEm  : TGUID = '{6F1D2B82-D5A0-11CF-BFC7-444553540000}';
  360.   {$EXTERNALSYM GUID_SysKeyboardEm}
  361.   GUID_SysKeyboardEm2 : TGUID = '{6F1D2B83-D5A0-11CF-BFC7-444553540000}';
  362.   {$EXTERNALSYM GUID_SysKeyboardEm2}
  363.  
  364. (****************************************************************************
  365.  *
  366.  *      Predefined force feedback effects
  367.  *
  368.  ****************************************************************************)
  369.  
  370. const
  371.   GUID_ConstantForce : TGUID = '{13541C20-8E33-11D0-9AD0-00A0C9A06E35}';
  372.   {$EXTERNALSYM GUID_ConstantForce}
  373.   GUID_RampForce     : TGUID = '{13541C21-8E33-11D0-9AD0-00A0C9A06E35}';
  374.   {$EXTERNALSYM GUID_RampForce}
  375.   GUID_Square        : TGUID = '{13541C22-8E33-11D0-9AD0-00A0C9A06E35}';
  376.   {$EXTERNALSYM GUID_Square}
  377.   GUID_Sine          : TGUID = '{13541C23-8E33-11D0-9AD0-00A0C9A06E35}';
  378.   {$EXTERNALSYM GUID_Sine}
  379.   GUID_Triangle      : TGUID = '{13541C24-8E33-11D0-9AD0-00A0C9A06E35}';
  380.   {$EXTERNALSYM GUID_Triangle}
  381.   GUID_SawtoothUp    : TGUID = '{13541C25-8E33-11D0-9AD0-00A0C9A06E35}';
  382.   {$EXTERNALSYM GUID_SawtoothUp}
  383.   GUID_SawtoothDown  : TGUID = '{13541C26-8E33-11D0-9AD0-00A0C9A06E35}';
  384.   {$EXTERNALSYM GUID_SawtoothDown}
  385.   GUID_Spring        : TGUID = '{13541C27-8E33-11D0-9AD0-00A0C9A06E35}';
  386.   {$EXTERNALSYM GUID_Spring}
  387.   GUID_Damper        : TGUID = '{13541C28-8E33-11D0-9AD0-00A0C9A06E35}';
  388.   {$EXTERNALSYM GUID_Damper}
  389.   GUID_Inertia       : TGUID = '{13541C29-8E33-11D0-9AD0-00A0C9A06E35}';
  390.   {$EXTERNALSYM GUID_Inertia}
  391.   GUID_Friction      : TGUID = '{13541C2A-8E33-11D0-9AD0-00A0C9A06E35}';
  392.   {$EXTERNALSYM GUID_Friction}
  393.   GUID_CustomForce   : TGUID = '{13541C2B-8E33-11D0-9AD0-00A0C9A06E35}';
  394.   {$EXTERNALSYM GUID_CustomForce}
  395.  
  396.   
  397. (****************************************************************************
  398.  *
  399.  *      Interfaces and Structures...
  400.  *
  401.  ****************************************************************************)
  402.  
  403. {$IFDEF DIRECTINPUT_VERSION_5}
  404.  
  405. (****************************************************************************
  406.  *
  407.  *      IDirectInputEffect
  408.  *
  409.  ****************************************************************************)
  410.  
  411. const
  412.   DIEFT_ALL                   = $00000000;
  413.   {$EXTERNALSYM DIEFT_ALL}
  414.  
  415.   DIEFT_CONSTANTFORCE         = $00000001;
  416.   {$EXTERNALSYM DIEFT_CONSTANTFORCE}
  417.   DIEFT_RAMPFORCE             = $00000002;
  418.   {$EXTERNALSYM DIEFT_RAMPFORCE}
  419.   DIEFT_PERIODIC              = $00000003;
  420.   {$EXTERNALSYM DIEFT_PERIODIC}
  421.   DIEFT_CONDITION             = $00000004;
  422.   {$EXTERNALSYM DIEFT_CONDITION}
  423.   DIEFT_CUSTOMFORCE           = $00000005;
  424.   {$EXTERNALSYM DIEFT_CUSTOMFORCE}
  425.   DIEFT_HARDWARE              = $000000FF;
  426.   {$EXTERNALSYM DIEFT_HARDWARE}
  427.   DIEFT_FFATTACK              = $00000200;
  428.   {$EXTERNALSYM DIEFT_FFATTACK}
  429.   DIEFT_FFFADE                = $00000400;
  430.   {$EXTERNALSYM DIEFT_FFFADE}
  431.   DIEFT_SATURATION            = $00000800;
  432.   {$EXTERNALSYM DIEFT_SATURATION}
  433.   DIEFT_POSNEGCOEFFICIENTS    = $00001000;
  434.   {$EXTERNALSYM DIEFT_POSNEGCOEFFICIENTS}
  435.   DIEFT_POSNEGSATURATION      = $00002000;
  436.   {$EXTERNALSYM DIEFT_POSNEGSATURATION}
  437.   DIEFT_DEADBAND              = $00004000;
  438.   {$EXTERNALSYM DIEFT_DEADBAND}
  439.   DIEFT_STARTDELAY            = $00008000;
  440.   {$EXTERNALSYM DIEFT_STARTDELAY}
  441.  
  442. //#define DIEFT_GETTYPE(n)            LOBYTE(n)
  443. function DIEFT_GETTYPE(n: Cardinal): Byte;
  444. {$EXTERNALSYM DIEFT_GETTYPE}
  445.  
  446. const
  447.   DI_DEGREES                  = 100;
  448.   {$EXTERNALSYM DI_DEGREES}
  449.   DI_FFNOMINALMAX             = 10000;
  450.   {$EXTERNALSYM DI_FFNOMINALMAX}
  451.   DI_SECONDS                  = 1000000;
  452.   {$EXTERNALSYM DI_SECONDS}
  453.  
  454. type
  455.   PDIConstantForce = ^TDIConstantForce;
  456.   DICONSTANTFORCE = packed record
  457.     lMagnitude: Longint;
  458.   end;
  459.   {$EXTERNALSYM DICONSTANTFORCE}
  460.   TDIConstantForce = DICONSTANTFORCE;
  461.  
  462.   PDIRampForce = ^TDIRampForce;
  463.   DIRAMPFORCE = packed record
  464.     lStart: Longint;
  465.     lEnd: Longint;
  466.   end;
  467.   {$EXTERNALSYM DIRAMPFORCE}
  468.   TDIRampForce = DIRAMPFORCE;
  469.  
  470.   PDIPeriodic = ^TDIPeriodic;
  471.   DIPERIODIC = packed record
  472.     dwMagnitude: DWORD;
  473.     lOffset: Longint;
  474.     dwPhase: DWORD;
  475.     dwPeriod: DWORD;
  476.   end;
  477.   {$EXTERNALSYM DIPERIODIC}
  478.   TDIPeriodic = DIPERIODIC;
  479.  
  480.   PDICondition = ^TDICondition;
  481.   DICONDITION = packed record
  482.     lOffset: Longint;
  483.     lPositiveCoefficient: Longint;
  484.     lNegativeCoefficient: Longint;
  485.     dwPositiveSaturation: DWORD;
  486.     dwNegativeSaturation: DWORD;
  487.     lDeadBand: Longint;
  488.   end;
  489.   {$EXTERNALSYM DICONDITION}
  490.   TDICondition = DICONDITION;
  491.  
  492.   PDICustomForce = ^TDICustomForce;
  493.   DICUSTOMFORCE = packed record
  494.     cChannels: DWORD;
  495.     dwSamplePeriod: DWORD;
  496.     cSamples: DWORD;
  497.     rglForceData: PLongint;
  498.   end;
  499.   {$EXTERNALSYM DICUSTOMFORCE}
  500.   TDICustomForce = DICUSTOMFORCE;
  501.  
  502.   PDIEnvelope = ^TDIEnvelope;
  503.   DIENVELOPE = packed record
  504.     dwSize: DWORD;                   (* sizeof(DIENVELOPE)   *)
  505.     dwAttackLevel: DWORD;
  506.     dwAttackTime: DWORD;             (* Microseconds         *)
  507.     dwFadeLevel: DWORD;
  508.     dwFadeTime: DWORD;               (* Microseconds         *)
  509.   end;
  510.   {$EXTERNALSYM DIENVELOPE}
  511.   TDIEnvelope = DIENVELOPE;
  512.  
  513.  
  514. (* This structure is defined for DirectX 5.0 compatibility *)
  515.   PDIEffectDX5 = ^TDIEffectDX5;
  516.   DIEFFECT_DX5 = packed record
  517.     dwSize: DWORD;                   (* sizeof(DIEFFECT_DX5) *)
  518.     dwFlags: DWORD;                  (* DIEFF_*              *)
  519.     dwDuration: DWORD;               (* Microseconds         *)
  520.     dwSamplePeriod: DWORD;           (* Microseconds         *)
  521.     dwGain: DWORD;
  522.     dwTriggerButton: DWORD;          (* or DIEB_NOTRIGGER    *)
  523.     dwTriggerRepeatInterval: DWORD;  (* Microseconds         *)
  524.     cAxes: DWORD;                    (* Number of axes       *)
  525.     rgdwAxes: PDWORD;                (* Array of axes        *)
  526.     rglDirection: PLongint;          (* Array of directions  *)
  527.     lpEnvelope: PDIEnvelope;         (* Optional             *)
  528.     cbTypeSpecificParams: DWORD;     (* Size of params       *)
  529.     lpvTypeSpecificParams: Pointer;  (* Pointer to params    *)
  530.   end;
  531.   {$EXTERNALSYM DIEFFECT_DX5}
  532.   TDIEffectDX5 = DIEFFECT_DX5;
  533.  
  534.   PDIEffect = ^TDIEffect;
  535.   DIEFFECT = packed record
  536.     dwSize: DWORD;                   (* sizeof(DIEFFECT)     *)
  537.     dwFlags: DWORD;                  (* DIEFF_*              *)
  538.     dwDuration: DWORD;               (* Microseconds         *)
  539.     dwSamplePeriod: DWORD;           (* Microseconds         *)
  540.     dwGain: DWORD;
  541.     dwTriggerButton: DWORD;          (* or DIEB_NOTRIGGER    *)
  542.     dwTriggerRepeatInterval: DWORD;  (* Microseconds         *)
  543.     cAxes: DWORD;                    (* Number of axes       *)
  544.     rgdwAxes: PDWORD;                (* Array of axes        *)
  545.     rglDirection: PLongint;          (* Array of directions  *)
  546.     lpEnvelope: PDIEnvelope;         (* Optional             *)
  547.     cbTypeSpecificParams: DWORD;     (* Size of params       *)
  548.     lpvTypeSpecificParams: Pointer;  (* Pointer to params    *)
  549. {$IFDEF DIRECTINPUT_VERSION_6}
  550.     dwStartDelay:  DWORD;            (* Microseconds         *)
  551. {$ENDIF} (* DIRECTINPUT_VERSION >= 0x0600 *)
  552.   end;
  553.   {$EXTERNALSYM DIEFFECT}
  554.   TDIEffect = DIEFFECT;
  555.  
  556.   DIEFFECT_DX6 = DIEFFECT;
  557.   {$EXTERNALSYM DIEFFECT_DX6}
  558.   TDIEffectDX6 = DIEFFECT_DX6;
  559.   PDIEffectDX6 = ^TDIEffectDX6;
  560.  
  561. {$IFDEF DIRECTINPUT_VERSION_7}
  562.   PDIFileEffect = ^TDIFileEffect;
  563.   DIFILEEFFECT = packed record
  564.     dwSize: DWORD;
  565.     GuidEffect: TGUID;
  566.     lpDiEffect: PDIEffect;
  567.     szFriendlyName: array [0..MAX_PATH-1] of Char;
  568.   end;
  569.   {$EXTERNALSYM DIFILEEFFECT}
  570.   TDIFileEffect = DIFILEEFFECT;
  571.  
  572.   TDIEnumEffectsInFileCallback = function (const Effect: TDIFileEffect; Data: Pointer): BOOL; stdcall;
  573.   {$NODEFINE TDIEnumEffectsInFileCallback}
  574.   {$HPPEMIT 'typedef LPDIENUMEFFECTSINFILECALLBACK TDIEnumEffectsInFileCallback;'}
  575. {$ENDIF} (* DIRECTINPUT_VERSION >= 0x0700 *)
  576.  
  577. const
  578.   DIEFF_OBJECTIDS             = $00000001;
  579.   {$EXTERNALSYM DIEFF_OBJECTIDS}
  580.   DIEFF_OBJECTOFFSETS         = $00000002;
  581.   {$EXTERNALSYM DIEFF_OBJECTOFFSETS}
  582.   DIEFF_CARTESIAN             = $00000010;
  583.   {$EXTERNALSYM DIEFF_CARTESIAN}
  584.   DIEFF_POLAR                 = $00000020;
  585.   {$EXTERNALSYM DIEFF_POLAR}
  586.   DIEFF_SPHERICAL             = $00000040;
  587.   {$EXTERNALSYM DIEFF_SPHERICAL}
  588.  
  589.   DIEP_DURATION               = $00000001;
  590.   {$EXTERNALSYM DIEP_DURATION}
  591.   DIEP_SAMPLEPERIOD           = $00000002;
  592.   {$EXTERNALSYM DIEP_SAMPLEPERIOD}
  593.   DIEP_GAIN                   = $00000004;
  594.   {$EXTERNALSYM DIEP_GAIN}
  595.   DIEP_TRIGGERBUTTON          = $00000008;
  596.   {$EXTERNALSYM DIEP_TRIGGERBUTTON}
  597.   DIEP_TRIGGERREPEATINTERVAL  = $00000010;
  598.   {$EXTERNALSYM DIEP_TRIGGERREPEATINTERVAL}
  599.   DIEP_AXES                   = $00000020;
  600.   {$EXTERNALSYM DIEP_AXES}
  601.   DIEP_DIRECTION              = $00000040;
  602.   {$EXTERNALSYM DIEP_DIRECTION}
  603.   DIEP_ENVELOPE               = $00000080;
  604.   {$EXTERNALSYM DIEP_ENVELOPE}
  605.   DIEP_TYPESPECIFICPARAMS     = $00000100;
  606.   {$EXTERNALSYM DIEP_TYPESPECIFICPARAMS}
  607. {$IFDEF DIRECTINPUT_VERSION_6}
  608.   DIEP_STARTDELAY             = $00000200;
  609.   {$EXTERNALSYM DIEP_STARTDELAY}
  610.   DIEP_ALLPARAMS_DX5          = $000001FF;
  611.   {$EXTERNALSYM DIEP_ALLPARAMS_DX5}
  612.   DIEP_ALLPARAMS              = $000003FF;
  613.   {$EXTERNALSYM DIEP_ALLPARAMS}
  614. {$ELSE} (* DIRECTINPUT_VERSION < 0x0600 *)
  615.   DIEP_ALLPARAMS              = $000001FF;
  616.   {$EXTERNALSYM DIEP_ALLPARAMS}
  617. {$ENDIF} (* DIRECTINPUT_VERSION ? 0x0600 *)
  618.   DIEP_START                  = $20000000;
  619.   {$EXTERNALSYM DIEP_START}
  620.   DIEP_NORESTART              = $40000000;
  621.   {$EXTERNALSYM DIEP_NORESTART}
  622.   DIEP_NODOWNLOAD             = $80000000;
  623.   {$EXTERNALSYM DIEP_NODOWNLOAD}
  624.   DIEB_NOTRIGGER              = $FFFFFFFF;
  625.   {$EXTERNALSYM DIEB_NOTRIGGER}
  626.  
  627.   DIES_SOLO                   = $00000001;
  628.   {$EXTERNALSYM DIES_SOLO}
  629.   DIES_NODOWNLOAD             = $80000000;
  630.   {$EXTERNALSYM DIES_NODOWNLOAD}
  631.  
  632.   DIEGES_PLAYING              = $00000001;
  633.   {$EXTERNALSYM DIEGES_PLAYING}
  634.   DIEGES_EMULATED             = $00000002;
  635.   {$EXTERNALSYM DIEGES_EMULATED}
  636.  
  637. type
  638.   PDIEffEscape = ^TDIEffEscape;
  639.   DIEFFESCAPE = packed record
  640.     dwSize: DWORD;
  641.     dwCommand: DWORD;
  642.     lpvInBuffer: Pointer;
  643.     cbInBuffer: DWORD;
  644.     lpvOutBuffer: Pointer;
  645.     cbOutBuffer: DWORD;
  646.   end;
  647.   {$EXTERNALSYM DIEFFESCAPE}
  648.   TDIEffEscape = DIEFFESCAPE;
  649.  
  650.  
  651. type
  652.   {$EXTERNALSYM IDirectInputEffect}
  653.   IDirectInputEffect = interface(IUnknown)
  654.     [SID_IDirectInputEffect]
  655.     (*** IDirectInputEffect methods ***)
  656.     function Initialize(hinst: THandle; dwVersion: DWORD; const rguid: TGUID): HResult; stdcall;
  657.     function GetEffectGuid(out pguid: TGUID): HResult; stdcall;
  658.     function GetParameters(var peff: TDIEffect; dwFlags: DWORD): HResult; stdcall;
  659.     function SetParameters(const peff: TDIEffect; dwFlags: DWORD): HResult; stdcall;
  660.     function Start(dwIterations, dwFlags: DWORD): HResult; stdcall;
  661.     function Stop: HResult; stdcall;
  662.     function GetEffectStatus(out pdwFlags: DWORD): HResult; stdcall;
  663.     function Download: HResult; stdcall;
  664.     function Unload: HResult; stdcall;
  665.     function Escape(var pesc: PDIEffEscape): HResult; stdcall;
  666.   end;
  667.  
  668. {$ENDIF} (* DIRECTINPUT_VERSION >= 0x0500 *)
  669.  
  670. (****************************************************************************
  671.  *
  672.  *      IDirectInputDevice
  673.  *
  674.  ****************************************************************************)
  675.  
  676. const
  677. {$IFNDEF DIRECTINPUT_VERSION_8} (* #if DIRECTINPUT_VERSION <= 0x700 *)
  678.   DIDEVTYPE_DEVICE        = 1;
  679.   {$EXTERNALSYM DIDEVTYPE_DEVICE}
  680.   DIDEVTYPE_MOUSE         = 2;
  681.   {$EXTERNALSYM DIDEVTYPE_MOUSE}
  682.   DIDEVTYPE_KEYBOARD      = 3;
  683.   {$EXTERNALSYM DIDEVTYPE_KEYBOARD}
  684.   DIDEVTYPE_JOYSTICK      = 4;
  685.   {$EXTERNALSYM DIDEVTYPE_JOYSTICK}
  686. {$ELSE}
  687.   DI8DEVCLASS_ALL             = 0;
  688.   {$EXTERNALSYM DI8DEVCLASS_ALL}
  689.   DI8DEVCLASS_DEVICE          = 1;
  690.   {$EXTERNALSYM DI8DEVCLASS_DEVICE}
  691.   DI8DEVCLASS_POINTER         = 2;
  692.   {$EXTERNALSYM DI8DEVCLASS_POINTER}
  693.   DI8DEVCLASS_KEYBOARD        = 3;
  694.   {$EXTERNALSYM DI8DEVCLASS_KEYBOARD}
  695.   DI8DEVCLASS_GAMECTRL        = 4;
  696.   {$EXTERNALSYM DI8DEVCLASS_GAMECTRL}
  697.  
  698.   DI8DEVTYPE_DEVICE           = $11;
  699.   {$EXTERNALSYM DI8DEVTYPE_DEVICE}
  700.   DI8DEVTYPE_MOUSE            = $12;
  701.   {$EXTERNALSYM DI8DEVTYPE_MOUSE}
  702.   DI8DEVTYPE_KEYBOARD         = $13;
  703.   {$EXTERNALSYM DI8DEVTYPE_KEYBOARD}
  704.   DI8DEVTYPE_JOYSTICK         = $14;
  705.   {$EXTERNALSYM DI8DEVTYPE_JOYSTICK}
  706.   DI8DEVTYPE_GAMEPAD          = $15;
  707.   {$EXTERNALSYM DI8DEVTYPE_GAMEPAD}
  708.   DI8DEVTYPE_DRIVING          = $16;
  709.   {$EXTERNALSYM DI8DEVTYPE_DRIVING}
  710.   DI8DEVTYPE_FLIGHT           = $17;
  711.   {$EXTERNALSYM DI8DEVTYPE_FLIGHT}
  712.   DI8DEVTYPE_1STPERSON        = $18;
  713.   {$EXTERNALSYM DI8DEVTYPE_1STPERSON}
  714.   DI8DEVTYPE_DEVICECTRL       = $19;
  715.   {$EXTERNALSYM DI8DEVTYPE_DEVICECTRL}
  716.   DI8DEVTYPE_SCREENPOINTER    = $1A;
  717.   {$EXTERNALSYM DI8DEVTYPE_SCREENPOINTER}
  718.   DI8DEVTYPE_REMOTE           = $1B;
  719.   {$EXTERNALSYM DI8DEVTYPE_REMOTE}
  720.   DI8DEVTYPE_SUPPLEMENTAL     = $1C;
  721.   {$EXTERNALSYM DI8DEVTYPE_SUPPLEMENTAL}
  722. {$ENDIF} (* DIRECTINPUT_VERSION <= 0x700 *)
  723.  
  724.   DIDEVTYPE_HID           = $00010000;
  725.   {$EXTERNALSYM DIDEVTYPE_HID}
  726.  
  727. {$IFNDEF DIRECTINPUT_VERSION_8} (* #if DIRECTINPUT_VERSION <= 0x700 *)
  728.   DIDEVTYPEMOUSE_UNKNOWN          =  1;
  729.   {$EXTERNALSYM DIDEVTYPEMOUSE_UNKNOWN}
  730.   DIDEVTYPEMOUSE_TRADITIONAL      =  2;
  731.   {$EXTERNALSYM DIDEVTYPEMOUSE_TRADITIONAL}
  732.   DIDEVTYPEMOUSE_FINGERSTICK      =  3;
  733.   {$EXTERNALSYM DIDEVTYPEMOUSE_FINGERSTICK}
  734.   DIDEVTYPEMOUSE_TOUCHPAD         =  4;
  735.   {$EXTERNALSYM DIDEVTYPEMOUSE_TOUCHPAD}
  736.   DIDEVTYPEMOUSE_TRACKBALL        =  5;
  737.   {$EXTERNALSYM DIDEVTYPEMOUSE_TRACKBALL}
  738.  
  739.   DIDEVTYPEKEYBOARD_UNKNOWN       =  0;
  740.   {$EXTERNALSYM DIDEVTYPEKEYBOARD_UNKNOWN}
  741.   DIDEVTYPEKEYBOARD_PCXT          =  1;
  742.   {$EXTERNALSYM DIDEVTYPEKEYBOARD_PCXT}
  743.   DIDEVTYPEKEYBOARD_OLIVETTI      =  2;
  744.   {$EXTERNALSYM DIDEVTYPEKEYBOARD_OLIVETTI}
  745.   DIDEVTYPEKEYBOARD_PCAT          =  3;
  746.   {$EXTERNALSYM DIDEVTYPEKEYBOARD_PCAT}
  747.   DIDEVTYPEKEYBOARD_PCENH         =  4;
  748.   {$EXTERNALSYM DIDEVTYPEKEYBOARD_PCENH}
  749.   DIDEVTYPEKEYBOARD_NOKIA1050     =  5;
  750.   {$EXTERNALSYM DIDEVTYPEKEYBOARD_NOKIA1050}
  751.   DIDEVTYPEKEYBOARD_NOKIA9140     =  6;
  752.   {$EXTERNALSYM DIDEVTYPEKEYBOARD_NOKIA9140}
  753.   DIDEVTYPEKEYBOARD_NEC98         =  7;
  754.   {$EXTERNALSYM DIDEVTYPEKEYBOARD_NEC98}
  755.   DIDEVTYPEKEYBOARD_NEC98LAPTOP   =  8;
  756.   {$EXTERNALSYM DIDEVTYPEKEYBOARD_NEC98LAPTOP}
  757.   DIDEVTYPEKEYBOARD_NEC98106      =  9;
  758.   {$EXTERNALSYM DIDEVTYPEKEYBOARD_NEC98106}
  759.   DIDEVTYPEKEYBOARD_JAPAN106      = 10;
  760.   {$EXTERNALSYM DIDEVTYPEKEYBOARD_JAPAN106}
  761.   DIDEVTYPEKEYBOARD_JAPANAX       = 11;
  762.   {$EXTERNALSYM DIDEVTYPEKEYBOARD_JAPANAX}
  763.   DIDEVTYPEKEYBOARD_J3100         = 12;
  764.   {$EXTERNALSYM DIDEVTYPEKEYBOARD_J3100}
  765.  
  766.   DIDEVTYPEJOYSTICK_UNKNOWN       =  1;
  767.   {$EXTERNALSYM DIDEVTYPEJOYSTICK_UNKNOWN}
  768.   DIDEVTYPEJOYSTICK_TRADITIONAL   =  2;
  769.   {$EXTERNALSYM DIDEVTYPEJOYSTICK_TRADITIONAL}
  770.   DIDEVTYPEJOYSTICK_FLIGHTSTICK   =  3;
  771.   {$EXTERNALSYM DIDEVTYPEJOYSTICK_FLIGHTSTICK}
  772.   DIDEVTYPEJOYSTICK_GAMEPAD       =  4;
  773.   {$EXTERNALSYM DIDEVTYPEJOYSTICK_GAMEPAD}
  774.   DIDEVTYPEJOYSTICK_RUDDER        =  5;
  775.   {$EXTERNALSYM DIDEVTYPEJOYSTICK_RUDDER}
  776.   DIDEVTYPEJOYSTICK_WHEEL         =  6;
  777.   {$EXTERNALSYM DIDEVTYPEJOYSTICK_WHEEL}
  778.   DIDEVTYPEJOYSTICK_HEADTRACKER   =  7;
  779.   {$EXTERNALSYM DIDEVTYPEJOYSTICK_HEADTRACKER}
  780. {$ELSE}
  781.   DI8DEVTYPEMOUSE_UNKNOWN                     = 1;
  782.   {$EXTERNALSYM DI8DEVTYPEMOUSE_UNKNOWN}
  783.   DI8DEVTYPEMOUSE_TRADITIONAL                 = 2;
  784.   {$EXTERNALSYM DI8DEVTYPEMOUSE_TRADITIONAL}
  785.   DI8DEVTYPEMOUSE_FINGERSTICK                 = 3;
  786.   {$EXTERNALSYM DI8DEVTYPEMOUSE_FINGERSTICK}
  787.   DI8DEVTYPEMOUSE_TOUCHPAD                    = 4;
  788.   {$EXTERNALSYM DI8DEVTYPEMOUSE_TOUCHPAD}
  789.   DI8DEVTYPEMOUSE_TRACKBALL                   = 5;
  790.   {$EXTERNALSYM DI8DEVTYPEMOUSE_TRACKBALL}
  791.   DI8DEVTYPEMOUSE_ABSOLUTE                    = 6;
  792.   {$EXTERNALSYM DI8DEVTYPEMOUSE_ABSOLUTE}
  793.  
  794.   DI8DEVTYPEKEYBOARD_UNKNOWN                  = 0;
  795.   {$EXTERNALSYM DI8DEVTYPEKEYBOARD_UNKNOWN}
  796.   DI8DEVTYPEKEYBOARD_PCXT                     = 1;
  797.   {$EXTERNALSYM DI8DEVTYPEKEYBOARD_PCXT}
  798.   DI8DEVTYPEKEYBOARD_OLIVETTI                 = 2;
  799.   {$EXTERNALSYM DI8DEVTYPEKEYBOARD_OLIVETTI}
  800.   DI8DEVTYPEKEYBOARD_PCAT                     = 3;
  801.   {$EXTERNALSYM DI8DEVTYPEKEYBOARD_PCAT}
  802.   DI8DEVTYPEKEYBOARD_PCENH                    = 4;
  803.   {$EXTERNALSYM DI8DEVTYPEKEYBOARD_PCENH}
  804.   DI8DEVTYPEKEYBOARD_NOKIA1050                = 5;
  805.   {$EXTERNALSYM DI8DEVTYPEKEYBOARD_NOKIA1050}
  806.   DI8DEVTYPEKEYBOARD_NOKIA9140                = 6;
  807.   {$EXTERNALSYM DI8DEVTYPEKEYBOARD_NOKIA9140}
  808.   DI8DEVTYPEKEYBOARD_NEC98                    = 7;
  809.   {$EXTERNALSYM DI8DEVTYPEKEYBOARD_NEC98}
  810.   DI8DEVTYPEKEYBOARD_NEC98LAPTOP              = 8;
  811.   {$EXTERNALSYM DI8DEVTYPEKEYBOARD_NEC98LAPTOP}
  812.   DI8DEVTYPEKEYBOARD_NEC98106                 = 9;
  813.   {$EXTERNALSYM DI8DEVTYPEKEYBOARD_NEC98106}
  814.   DI8DEVTYPEKEYBOARD_JAPAN106                 = 10;
  815.   {$EXTERNALSYM DI8DEVTYPEKEYBOARD_JAPAN106}
  816.   DI8DEVTYPEKEYBOARD_JAPANAX                  = 11;
  817.   {$EXTERNALSYM DI8DEVTYPEKEYBOARD_JAPANAX}
  818.   DI8DEVTYPEKEYBOARD_J3100                    = 12;
  819.   {$EXTERNALSYM DI8DEVTYPEKEYBOARD_J3100}
  820.  
  821.   DI8DEVTYPE_LIMITEDGAMESUBTYPE               = 1;
  822.   {$EXTERNALSYM DI8DEVTYPE_LIMITEDGAMESUBTYPE}
  823.  
  824.   DI8DEVTYPEJOYSTICK_LIMITED                  = DI8DEVTYPE_LIMITEDGAMESUBTYPE;
  825.   {$EXTERNALSYM DI8DEVTYPEJOYSTICK_LIMITED}
  826.   DI8DEVTYPEJOYSTICK_STANDARD                 = 2;
  827.   {$EXTERNALSYM DI8DEVTYPEJOYSTICK_STANDARD}
  828.  
  829.   DI8DEVTYPEGAMEPAD_LIMITED                   = DI8DEVTYPE_LIMITEDGAMESUBTYPE;
  830.   {$EXTERNALSYM DI8DEVTYPEGAMEPAD_LIMITED}
  831.   DI8DEVTYPEGAMEPAD_STANDARD                  = 2;
  832.   {$EXTERNALSYM DI8DEVTYPEGAMEPAD_STANDARD}
  833.   DI8DEVTYPEGAMEPAD_TILT                      = 3;
  834.   {$EXTERNALSYM DI8DEVTYPEGAMEPAD_TILT}
  835.  
  836.   DI8DEVTYPEDRIVING_LIMITED                   = DI8DEVTYPE_LIMITEDGAMESUBTYPE;
  837.   {$EXTERNALSYM DI8DEVTYPEDRIVING_LIMITED}
  838.   DI8DEVTYPEDRIVING_COMBINEDPEDALS            = 2;
  839.   {$EXTERNALSYM DI8DEVTYPEDRIVING_COMBINEDPEDALS}
  840.   DI8DEVTYPEDRIVING_DUALPEDALS                = 3;
  841.   {$EXTERNALSYM DI8DEVTYPEDRIVING_DUALPEDALS}
  842.   DI8DEVTYPEDRIVING_THREEPEDALS               = 4;
  843.   {$EXTERNALSYM DI8DEVTYPEDRIVING_THREEPEDALS}
  844.   DI8DEVTYPEDRIVING_HANDHELD                  = 5;
  845.   {$EXTERNALSYM DI8DEVTYPEDRIVING_HANDHELD}
  846.  
  847.   DI8DEVTYPEFLIGHT_LIMITED                    = DI8DEVTYPE_LIMITEDGAMESUBTYPE;
  848.   {$EXTERNALSYM DI8DEVTYPEFLIGHT_LIMITED}
  849.   DI8DEVTYPEFLIGHT_STICK                      = 2;
  850.   {$EXTERNALSYM DI8DEVTYPEFLIGHT_STICK}
  851.   DI8DEVTYPEFLIGHT_YOKE                       = 3;
  852.   {$EXTERNALSYM DI8DEVTYPEFLIGHT_YOKE}
  853.   DI8DEVTYPEFLIGHT_RC                         = 4;
  854.   {$EXTERNALSYM DI8DEVTYPEFLIGHT_RC}
  855.  
  856.   DI8DEVTYPE1STPERSON_LIMITED                 = DI8DEVTYPE_LIMITEDGAMESUBTYPE;
  857.   {$EXTERNALSYM DI8DEVTYPE1STPERSON_LIMITED}
  858.   DI8DEVTYPE1STPERSON_UNKNOWN                 = 2;
  859.   {$EXTERNALSYM DI8DEVTYPE1STPERSON_UNKNOWN}
  860.   DI8DEVTYPE1STPERSON_SIXDOF                  = 3;
  861.   {$EXTERNALSYM DI8DEVTYPE1STPERSON_SIXDOF}
  862.   DI8DEVTYPE1STPERSON_SHOOTER                 = 4;
  863.   {$EXTERNALSYM DI8DEVTYPE1STPERSON_SHOOTER}
  864.  
  865.   DI8DEVTYPESCREENPTR_UNKNOWN                 = 2;
  866.   {$EXTERNALSYM DI8DEVTYPESCREENPTR_UNKNOWN}
  867.   DI8DEVTYPESCREENPTR_LIGHTGUN                = 3;
  868.   {$EXTERNALSYM DI8DEVTYPESCREENPTR_LIGHTGUN}
  869.   DI8DEVTYPESCREENPTR_LIGHTPEN                = 4;
  870.   {$EXTERNALSYM DI8DEVTYPESCREENPTR_LIGHTPEN}
  871.   DI8DEVTYPESCREENPTR_TOUCH                   = 5;
  872.   {$EXTERNALSYM DI8DEVTYPESCREENPTR_TOUCH}
  873.  
  874.   DI8DEVTYPEREMOTE_UNKNOWN                    = 2;
  875.   {$EXTERNALSYM DI8DEVTYPEREMOTE_UNKNOWN}
  876.  
  877.   DI8DEVTYPEDEVICECTRL_UNKNOWN                = 2;
  878.   {$EXTERNALSYM DI8DEVTYPEDEVICECTRL_UNKNOWN}
  879.   DI8DEVTYPEDEVICECTRL_COMMSSELECTION         = 3;
  880.   {$EXTERNALSYM DI8DEVTYPEDEVICECTRL_COMMSSELECTION}
  881.   DI8DEVTYPEDEVICECTRL_COMMSSELECTION_HARDWIRED = 4;
  882.   {$EXTERNALSYM DI8DEVTYPEDEVICECTRL_COMMSSELECTION_HARDWIRED}
  883.  
  884.   DI8DEVTYPESUPPLEMENTAL_UNKNOWN              = 2;
  885.   {$EXTERNALSYM DI8DEVTYPESUPPLEMENTAL_UNKNOWN}
  886.   DI8DEVTYPESUPPLEMENTAL_2NDHANDCONTROLLER    = 3;
  887.   {$EXTERNALSYM DI8DEVTYPESUPPLEMENTAL_2NDHANDCONTROLLER}
  888.   DI8DEVTYPESUPPLEMENTAL_HEADTRACKER          = 4;
  889.   {$EXTERNALSYM DI8DEVTYPESUPPLEMENTAL_HEADTRACKER}
  890.   DI8DEVTYPESUPPLEMENTAL_HANDTRACKER          = 5;
  891.   {$EXTERNALSYM DI8DEVTYPESUPPLEMENTAL_HANDTRACKER}
  892.   DI8DEVTYPESUPPLEMENTAL_SHIFTSTICKGATE       = 6;
  893.   {$EXTERNALSYM DI8DEVTYPESUPPLEMENTAL_SHIFTSTICKGATE}
  894.   DI8DEVTYPESUPPLEMENTAL_SHIFTER              = 7;
  895.   {$EXTERNALSYM DI8DEVTYPESUPPLEMENTAL_SHIFTER}
  896.   DI8DEVTYPESUPPLEMENTAL_THROTTLE             = 8;
  897.   {$EXTERNALSYM DI8DEVTYPESUPPLEMENTAL_THROTTLE}
  898.   DI8DEVTYPESUPPLEMENTAL_SPLITTHROTTLE        = 9;
  899.   {$EXTERNALSYM DI8DEVTYPESUPPLEMENTAL_SPLITTHROTTLE}
  900.   DI8DEVTYPESUPPLEMENTAL_COMBINEDPEDALS       = 10;
  901.   {$EXTERNALSYM DI8DEVTYPESUPPLEMENTAL_COMBINEDPEDALS}
  902.   DI8DEVTYPESUPPLEMENTAL_DUALPEDALS           = 11;
  903.   {$EXTERNALSYM DI8DEVTYPESUPPLEMENTAL_DUALPEDALS}
  904.   DI8DEVTYPESUPPLEMENTAL_THREEPEDALS          = 12;
  905.   {$EXTERNALSYM DI8DEVTYPESUPPLEMENTAL_THREEPEDALS}
  906.   DI8DEVTYPESUPPLEMENTAL_RUDDERPEDALS         = 13;
  907.   {$EXTERNALSYM DI8DEVTYPESUPPLEMENTAL_RUDDERPEDALS}
  908. {$ENDIF} (* DIRECTINPUT_VERSION <= 0x700 *)
  909.  
  910. // #define GET_DIDEVICE_TYPE(dwDevType)    LOBYTE(dwDevType)
  911. function GET_DIDEVICE_TYPE(dwDevType: DWORD): Byte;
  912. {$EXTERNALSYM GET_DIDEVICE_TYPE}
  913. // #define GET_DIDEVICE_SUBTYPE(dwDevType) HIBYTE(dwDevType)
  914. function GET_DIDEVICE_SUBTYPE(dwDevType: DWORD): Byte;
  915. {$EXTERNALSYM GET_DIDEVICE_SUBTYPE}
  916.  
  917. {$IFDEF DIRECTINPUT_VERSION_5} (* #if(DIRECTINPUT_VERSION >= 0x0500) *)
  918. (* This structure is defined for DirectX 3.0 compatibility *)
  919. type
  920.   PDIDevCapsDX3 = ^TDIDevCapsDX3;
  921.   DIDEVCAPS_DX3 = packed record
  922.     dwSize:    DWORD;
  923.     dwFlags:   DWORD;
  924.     dwDevType: DWORD;
  925.     dwAxes:    DWORD;
  926.     dwButtons: DWORD;
  927.     dwPOVs:    DWORD;
  928.   end;
  929.   {$EXTERNALSYM DIDEVCAPS_DX3}
  930.   TDIDevCapsDX3 = DIDEVCAPS_DX3;
  931. {$ENDIF} (* DIRECTINPUT_VERSION >= 0x0500 *)
  932.  
  933.   PDIDevCaps = ^TDIDevCaps;
  934.   DIDEVCAPS = packed record
  935.     dwSize: DWORD;
  936.     dwFlags: DWORD;
  937.     dwDevType: DWORD;
  938.     dwAxes: DWORD;
  939.     dwButtons: DWORD;
  940.     dwPOVs: DWORD;
  941. {$IFDEF DIRECTINPUT_VERSION_5} (* #if(DIRECTINPUT_VERSION >= 0x0500) *)
  942.     dwFFSamplePeriod: DWORD;
  943.     dwFFMinTimeResolution: DWORD;
  944.     dwFirmwareRevision: DWORD;
  945.     dwHardwareRevision: DWORD;
  946.     dwFFDriverVersion: DWORD;
  947. {$ENDIF} (* DIRECTINPUT_VERSION >= 0x0500 *)
  948.   end;
  949.   {$EXTERNALSYM DIDEVCAPS}
  950.   TDIDevCaps = DIDEVCAPS;
  951.  
  952. const
  953.   DIDC_ATTACHED           = $00000001;
  954.   {$EXTERNALSYM DIDC_ATTACHED}
  955.   DIDC_POLLEDDEVICE       = $00000002;
  956.   {$EXTERNALSYM DIDC_POLLEDDEVICE}
  957.   DIDC_EMULATED           = $00000004;
  958.   {$EXTERNALSYM DIDC_EMULATED}
  959.   DIDC_POLLEDDATAFORMAT   = $00000008;
  960.   {$EXTERNALSYM DIDC_POLLEDDATAFORMAT}
  961. {$IFDEF DIRECTINPUT_VERSION_5} (* #if(DIRECTINPUT_VERSION >= 0x0500) *)
  962.   DIDC_FORCEFEEDBACK      = $00000100;
  963.   {$EXTERNALSYM DIDC_FORCEFEEDBACK}
  964.   DIDC_FFATTACK           = $00000200;
  965.   {$EXTERNALSYM DIDC_FFATTACK}
  966.   DIDC_FFFADE             = $00000400;
  967.   {$EXTERNALSYM DIDC_FFFADE}
  968.   DIDC_SATURATION         = $00000800;
  969.   {$EXTERNALSYM DIDC_SATURATION}
  970.   DIDC_POSNEGCOEFFICIENTS = $00001000;
  971.   {$EXTERNALSYM DIDC_POSNEGCOEFFICIENTS}
  972.   DIDC_POSNEGSATURATION   = $00002000;
  973.   {$EXTERNALSYM DIDC_POSNEGSATURATION}
  974.   DIDC_DEADBAND           = $00004000;
  975.   {$EXTERNALSYM DIDC_DEADBAND}
  976. {$ENDIF} (* DIRECTINPUT_VERSION >= 0x0500 *)
  977.   DIDC_STARTDELAY         = $00008000;
  978.   {$EXTERNALSYM DIDC_STARTDELAY}
  979. {$IFDEF DIRECTINPUT_VERSION_5b} (* #if(DIRECTINPUT_VERSION >= 0x050a) *)
  980.   DIDC_ALIAS              = $00010000;
  981.   {$EXTERNALSYM DIDC_ALIAS}
  982.   DIDC_PHANTOM            = $00020000;
  983.   {$EXTERNALSYM DIDC_PHANTOM}
  984. {$ENDIF} (* DIRECTINPUT_VERSION >= 0x050a *)
  985. {$IFDEF DIRECTINPUT_VERSION_8} (* #if(DIRECTINPUT_VERSION >= 0x0800) *)
  986.   DIDC_HIDDEN             = $00040000;
  987.   {$EXTERNALSYM DIDC_HIDDEN}
  988. {$ENDIF} (* DIRECTINPUT_VERSION >= 0x0800 *)
  989.  
  990.   DIDFT_ALL           = $00000000;
  991.   {$EXTERNALSYM DIDFT_ALL}
  992.  
  993.   DIDFT_RELAXIS       = $00000001;
  994.   {$EXTERNALSYM DIDFT_RELAXIS}
  995.   DIDFT_ABSAXIS       = $00000002;
  996.   {$EXTERNALSYM DIDFT_ABSAXIS}
  997.   DIDFT_AXIS          = $00000003;
  998.   {$EXTERNALSYM DIDFT_AXIS}
  999.  
  1000.   DIDFT_PSHBUTTON     = $00000004;
  1001.   {$EXTERNALSYM DIDFT_PSHBUTTON}
  1002.   DIDFT_TGLBUTTON     = $00000008;
  1003.   {$EXTERNALSYM DIDFT_TGLBUTTON}
  1004.   DIDFT_BUTTON        = $0000000C;
  1005.   {$EXTERNALSYM DIDFT_BUTTON}
  1006.  
  1007.   DIDFT_POV           = $00000010;
  1008.   {$EXTERNALSYM DIDFT_POV}
  1009.   DIDFT_COLLECTION    = $00000040;
  1010.   {$EXTERNALSYM DIDFT_COLLECTION}
  1011.   DIDFT_NODATA        = $00000080;
  1012.   {$EXTERNALSYM DIDFT_NODATA}
  1013.  
  1014.   DIDFT_ANYINSTANCE   = $00FFFF00;
  1015.   {$EXTERNALSYM DIDFT_ANYINSTANCE}
  1016.   DIDFT_INSTANCEMASK  = DIDFT_ANYINSTANCE;
  1017.   {$EXTERNALSYM DIDFT_INSTANCEMASK}
  1018.  
  1019. // #define DIDFT_MAKEINSTANCE(n) ((WORD)(n) << 8)
  1020. function DIDFT_MAKEINSTANCE(n: Cardinal): Cardinal;
  1021. {$EXTERNALSYM DIDFT_MAKEINSTANCE}
  1022. // #define DIDFT_GETTYPE(n)     LOBYTE(n)
  1023. function DIDFT_GETTYPE(n: Cardinal): Byte;
  1024. {$EXTERNALSYM DIDFT_GETTYPE}
  1025. // #define DIDFT_GETINSTANCE(n) LOWORD((n) >> 8)
  1026. function DIDFT_GETINSTANCE(n: Cardinal): Cardinal;
  1027. {$EXTERNALSYM DIDFT_GETINSTANCE}
  1028.  
  1029. const
  1030.   DIDFT_FFACTUATOR        = $01000000;
  1031.   {$EXTERNALSYM DIDFT_FFACTUATOR}
  1032.   DIDFT_FFEFFECTTRIGGER   = $02000000;
  1033.   {$EXTERNALSYM DIDFT_FFEFFECTTRIGGER}
  1034. {$IFDEF DIRECTINPUT_VERSION_5b} (* #if(DIRECTINPUT_VERSION >= 0x050a) *)
  1035.   DIDFT_OUTPUT            = $10000000;
  1036.   {$EXTERNALSYM DIDFT_OUTPUT}
  1037.   DIDFT_VENDORDEFINED     = $04000000;
  1038.   {$EXTERNALSYM DIDFT_VENDORDEFINED}
  1039.   DIDFT_ALIAS             = $08000000;
  1040.   {$EXTERNALSYM DIDFT_ALIAS}
  1041. {$ENDIF} (* DIRECTINPUT_VERSION >= 0x050a *)
  1042.  
  1043. // #define DIDFT_ENUMCOLLECTION(n) ((WORD)(n) << 8)
  1044. function DIDFT_ENUMCOLLECTION(n: Cardinal): Cardinal;
  1045. {$EXTERNALSYM DIDFT_ENUMCOLLECTION}
  1046.  
  1047. const
  1048.   DIDFT_NOCOLLECTION      = $00FFFF00;
  1049.   {$EXTERNALSYM DIDFT_NOCOLLECTION}
  1050.  
  1051. type
  1052.   PDIObjectDataFormat = ^TDIObjectDataFormat;
  1053.   _DIOBJECTDATAFORMAT = packed record
  1054.     pguid: PGUID;
  1055.     dwOfs: DWORD;
  1056.     dwType: DWORD;
  1057.     dwFlags: DWORD;
  1058.   end;
  1059.   {$EXTERNALSYM _DIOBJECTDATAFORMAT}
  1060.   DIOBJECTDATAFORMAT = _DIOBJECTDATAFORMAT;
  1061.   {$EXTERNALSYM DIOBJECTDATAFORMAT}
  1062.   TDIObjectDataFormat = _DIOBJECTDATAFORMAT;
  1063.  
  1064.   PDIDataFormat = ^TDIDataFormat;
  1065.   _DIDATAFORMAT = packed record
  1066.     dwSize: DWORD;
  1067.     dwObjSize: DWORD;
  1068.     dwFlags: DWORD;
  1069.     dwDataSize: DWORD;
  1070.     dwNumObjs: DWORD;
  1071.     rgodf: PDIObjectDataFormat;
  1072.   end;
  1073.   {$EXTERNALSYM _DIDATAFORMAT}
  1074.   DIDATAFORMAT = _DIDATAFORMAT;
  1075.   {$EXTERNALSYM DIDATAFORMAT}
  1076.   TDIDataFormat = _DIDATAFORMAT;
  1077.  
  1078. const
  1079.   DIDF_ABSAXIS            = $00000001;
  1080.   {$EXTERNALSYM DIDF_ABSAXIS}
  1081.   DIDF_RELAXIS            = $00000002;
  1082.   {$EXTERNALSYM DIDF_RELAXIS}
  1083.  
  1084.  
  1085. {$IFDEF DIRECTINPUT_VERSION_8} (* #if(DIRECTINPUT_VERSION > 0x0700) *)
  1086.  
  1087. type
  1088.   PDIActionA = ^TDIActionA;
  1089.   PDIActionW = ^TDIActionW;
  1090.   PDIAction = PDIActionA;
  1091.   _DIACTIONA = packed record
  1092.     uAppData: Pointer;
  1093.     dwSemantic: DWORD;
  1094.     dwFlags: DWORD;
  1095.     case Byte of
  1096.       0: (
  1097.         lptszActionName: PAnsiChar;
  1098.         guidInstance: TGUID;
  1099.         dwObjID: DWORD;
  1100.         dwHow: DWORD;
  1101.        );
  1102.       1: (
  1103.         uResIdString: LongWord;
  1104.       );
  1105.   end;
  1106.   {$EXTERNALSYM _DIACTIONA}
  1107.   _DIACTIONW = packed record
  1108.     uAppData: Pointer;
  1109.     dwSemantic: DWORD;
  1110.     dwFlags: DWORD;
  1111.     case Byte of
  1112.       0: (
  1113.         lptszActionName: PWideChar;
  1114.         guidInstance: TGUID;
  1115.         dwObjID: DWORD;
  1116.         dwHow: DWORD;
  1117.        );
  1118.       1: (
  1119.         uResIdString: LongWord;
  1120.       );
  1121.   end;
  1122.   {$EXTERNALSYM _DIACTIONW}
  1123.   _DIACTION = _DIACTIONA;
  1124.   {$EXTERNALSYM _DIACTION}
  1125.   DIACTIONA = _DIACTIONA;
  1126.   {$EXTERNALSYM DIACTIONA}
  1127.   DIACTIONW = _DIACTIONW;
  1128.   {$EXTERNALSYM DIACTIONW}
  1129.   DIACTION = DIACTIONA;
  1130.   {$EXTERNALSYM DIACTION}
  1131.   TDIActionA = _DIACTIONA;
  1132.   TDIActionW = _DIACTIONW;
  1133.   TDIAction = TDIActionA;
  1134.  
  1135. const
  1136.   DIA_FORCEFEEDBACK       = $00000001;
  1137.   {$EXTERNALSYM DIA_FORCEFEEDBACK}
  1138.   DIA_APPMAPPED           = $00000002;
  1139.   {$EXTERNALSYM DIA_APPMAPPED}
  1140.   DIA_APPNOMAP            = $00000004;
  1141.   {$EXTERNALSYM DIA_APPNOMAP}
  1142.   DIA_NORANGE             = $00000008;
  1143.   {$EXTERNALSYM DIA_NORANGE}
  1144.   DIA_APPFIXED            = $00000010;
  1145.   {$EXTERNALSYM DIA_APPFIXED}
  1146.  
  1147.   DIAH_UNMAPPED           = $00000000;
  1148.   {$EXTERNALSYM DIAH_UNMAPPED}
  1149.   DIAH_USERCONFIG         = $00000001;
  1150.   {$EXTERNALSYM DIAH_USERCONFIG}
  1151.   DIAH_APPREQUESTED       = $00000002;
  1152.   {$EXTERNALSYM DIAH_APPREQUESTED}
  1153.   DIAH_HWAPP              = $00000004;
  1154.   {$EXTERNALSYM DIAH_HWAPP}
  1155.   DIAH_HWDEFAULT          = $00000008;
  1156.   {$EXTERNALSYM DIAH_HWDEFAULT}
  1157.   DIAH_DEFAULT            = $00000020;
  1158.   {$EXTERNALSYM DIAH_DEFAULT}
  1159.   DIAH_ERROR              = $80000000;
  1160.   {$EXTERNALSYM DIAH_ERROR}
  1161.  
  1162. type
  1163.   PDIActionFormatA = ^TDIActionFormatA;
  1164.   PDIActionFormatW = ^TDIActionFormatW;
  1165.   PDIActionFormat = PDIActionFormatA;
  1166.   _DIACTIONFORMATA = packed record
  1167.     dwSize        : DWORD;
  1168.     dwActionSize  : DWORD;
  1169.     dwDataSize    : DWORD;
  1170.     dwNumActions  : DWORD;
  1171.     rgoAction     : PDIActionA;
  1172.     guidActionMap : TGUID;
  1173.     dwGenre       : DWORD;
  1174.     dwBufferSize  : DWORD;
  1175.     lAxisMin      : Longint;
  1176.     lAxisMax      : Longint;
  1177.     hInstString   : THandle;
  1178.     ftTimeStamp   : TFileTime;
  1179.     dwCRC         : DWORD;
  1180.     tszActionMap  : array [0..MAX_PATH-1] of AnsiChar;
  1181.   end;
  1182.   {$EXTERNALSYM _DIACTIONFORMATA}
  1183.   _DIACTIONFORMATW = packed record
  1184.     dwSize        : DWORD;
  1185.     dwActionSize  : DWORD;
  1186.     dwDataSize    : DWORD;
  1187.     dwNumActions  : DWORD;
  1188.     rgoAction     : PDIActionW;
  1189.     guidActionMap : TGUID;
  1190.     dwGenre       : DWORD;
  1191.     dwBufferSize  : DWORD;
  1192.     lAxisMin      : Longint;
  1193.     lAxisMax      : Longint;
  1194.     hInstString   : THandle;
  1195.     ftTimeStamp   : TFileTime;
  1196.     dwCRC         : DWORD;
  1197.     tszActionMap  : array [0..MAX_PATH-1] of WideChar;
  1198.   end;
  1199.   {$EXTERNALSYM _DIACTIONFORMATW}
  1200.   _DIACTIONFORMAT = _DIACTIONFORMATA;
  1201.   {$EXTERNALSYM _DIACTIONFORMAT}
  1202.   DIACTIONFORMATA = _DIACTIONFORMATA;
  1203.   {$EXTERNALSYM DIACTIONFORMATA}
  1204.   DIACTIONFORMATW = _DIACTIONFORMATW;
  1205.   {$EXTERNALSYM DIACTIONFORMATW}
  1206.   DIACTIONFORMAT = DIACTIONFORMATA;
  1207.   {$EXTERNALSYM DIACTIONFORMAT}
  1208.   TDIActionFormatA = _DIACTIONFORMATA;
  1209.   TDIActionFormatW = _DIACTIONFORMATW;
  1210.   TDIActionFormat = TDIActionFormatA;
  1211.  
  1212. const
  1213.   DIAFTS_NEWDEVICELOW     = $FFFFFFFF;
  1214.   {$EXTERNALSYM DIAFTS_NEWDEVICELOW}
  1215.   DIAFTS_NEWDEVICEHIGH    = $FFFFFFFF;
  1216.   {$EXTERNALSYM DIAFTS_NEWDEVICEHIGH}
  1217.   DIAFTS_UNUSEDDEVICELOW  = $00000000;
  1218.   {$EXTERNALSYM DIAFTS_UNUSEDDEVICELOW}
  1219.   DIAFTS_UNUSEDDEVICEHIGH = $00000000;
  1220.   {$EXTERNALSYM DIAFTS_UNUSEDDEVICEHIGH}
  1221.  
  1222.   DIDBAM_DEFAULT          = $00000000;
  1223.   {$EXTERNALSYM DIDBAM_DEFAULT}
  1224.   DIDBAM_PRESERVE         = $00000001;
  1225.   {$EXTERNALSYM DIDBAM_PRESERVE}
  1226.   DIDBAM_INITIALIZE       = $00000002;
  1227.   {$EXTERNALSYM DIDBAM_INITIALIZE}
  1228.   DIDBAM_HWDEFAULTS       = $00000004;
  1229.   {$EXTERNALSYM DIDBAM_HWDEFAULTS}
  1230.  
  1231.   DIDSAM_DEFAULT          = $00000000;
  1232.   {$EXTERNALSYM DIDSAM_DEFAULT}
  1233.   DIDSAM_NOUSER           = $00000001;
  1234.   {$EXTERNALSYM DIDSAM_NOUSER}
  1235.   DIDSAM_FORCESAVE        = $00000002;
  1236.   {$EXTERNALSYM DIDSAM_FORCESAVE}
  1237.  
  1238.   DICD_DEFAULT            = $00000000;
  1239.   {$EXTERNALSYM DICD_DEFAULT}
  1240.   DICD_EDIT               = $00000001;
  1241.   {$EXTERNALSYM DICD_EDIT}
  1242.  
  1243. (*
  1244.  * The following definition is normally defined in d3dtypes.h
  1245.  *)
  1246. type
  1247.   TD3DColor = DXTypes.TD3DColor;
  1248.   {$NODEFINE TD3DColor}
  1249.  
  1250. {$HPPEMIT ''}
  1251. {$HPPEMIT '#ifndef D3DCOLOR_DEFINED_BCB'}
  1252. {$HPPEMIT 'typedef D3DCOLOR TD3DColor;'}
  1253. {$HPPEMIT '#define D3DCOLOR_DEFINED_BCB'}
  1254. {$HPPEMIT '#endif'}
  1255. {$HPPEMIT ''}
  1256.  
  1257. type
  1258.   PDIColorSet = ^TDIColorSet;
  1259.   _DICOLORSET = packed record
  1260.     dwSize: DWORD;
  1261.     cTextFore: TD3DColor;
  1262.     cTextHighlight: TD3DColor;
  1263.     cCalloutLine: TD3DColor;
  1264.     cCalloutHighlight: TD3DColor;
  1265.     cBorder: TD3DColor;
  1266.     cControlFill: TD3DColor;
  1267.     cHighlightFill: TD3DColor;
  1268.     cAreaFill: TD3DColor;
  1269.   end;
  1270.   {$EXTERNALSYM _DICOLORSET}
  1271.   DICOLORSET = _DICOLORSET;
  1272.   {$EXTERNALSYM DICOLORSET}
  1273.   TDIColorSet = _DICOLORSET;
  1274.  
  1275.   PDIConfigureDevicesParamsA = ^TDIConfigureDevicesParamsA;
  1276.   PDIConfigureDevicesParamsW = ^TDIConfigureDevicesParamsW;
  1277.   PDIConfigureDevicesParams = PDIConfigureDevicesParamsA;
  1278.   _DICONFIGUREDEVICESPARAMSA = packed record
  1279.      dwSize:         DWORD;
  1280.      dwcUsers:       DWORD;
  1281.      lptszUserNames: PAnsiChar;
  1282.      dwcFormats:     DWORD;
  1283.      lprgFormats:    PDIActionFormatA;
  1284.      hwnd:           HWND;
  1285.      dics:           TDIColorSet;
  1286.      lpUnkDDSTarget: IUnknown;
  1287.   end;
  1288.   {$EXTERNALSYM _DICONFIGUREDEVICESPARAMSA}
  1289.   _DICONFIGUREDEVICESPARAMSW = packed record
  1290.      dwSize:         DWORD;
  1291.      dwcUsers:       DWORD;
  1292.      lptszUserNames: PWideChar;
  1293.      dwcFormats:     DWORD;
  1294.      lprgFormats:    PDIActionFormatW;
  1295.      hwnd:           HWND;
  1296.      dics:           TDIColorSet;
  1297.      lpUnkDDSTarget: IUnknown;
  1298.   end;
  1299.   {$EXTERNALSYM _DICONFIGUREDEVICESPARAMSW}
  1300.   _DICONFIGUREDEVICESPARAMS = _DICONFIGUREDEVICESPARAMSA;
  1301.   {$EXTERNALSYM _DICONFIGUREDEVICESPARAMS}
  1302.   DICONFIGUREDEVICESPARAMSA = _DICONFIGUREDEVICESPARAMSA;
  1303.   {$EXTERNALSYM DICONFIGUREDEVICESPARAMSA}
  1304.   DICONFIGUREDEVICESPARAMSW = _DICONFIGUREDEVICESPARAMSW;
  1305.   {$EXTERNALSYM DICONFIGUREDEVICESPARAMSW}
  1306.   DICONFIGUREDEVICESPARAMS = DICONFIGUREDEVICESPARAMSA;
  1307.   {$EXTERNALSYM DICONFIGUREDEVICESPARAMS}
  1308.   TDIConfigureDevicesParamsA = _DICONFIGUREDEVICESPARAMSA;
  1309.   TDIConfigureDevicesParamsW = _DICONFIGUREDEVICESPARAMSW;
  1310.   TDIConfigureDevicesParams = TDIConfigureDevicesParamsA;
  1311.  
  1312. const
  1313.   DIDIFT_CONFIGURATION    = $00000001;
  1314.   {$EXTERNALSYM DIDIFT_CONFIGURATION}
  1315.   DIDIFT_OVERLAY          = $00000002;
  1316.   {$EXTERNALSYM DIDIFT_OVERLAY}
  1317.  
  1318.   DIDAL_CENTERED      = $00000000;
  1319.   {$EXTERNALSYM DIDAL_CENTERED}
  1320.   DIDAL_LEFTALIGNED   = $00000001;
  1321.   {$EXTERNALSYM DIDAL_LEFTALIGNED}
  1322.   DIDAL_RIGHTALIGNED  = $00000002;
  1323.   {$EXTERNALSYM DIDAL_RIGHTALIGNED}
  1324.   DIDAL_MIDDLE        = $00000000;
  1325.   {$EXTERNALSYM DIDAL_MIDDLE}
  1326.   DIDAL_TOPALIGNED    = $00000004;
  1327.   {$EXTERNALSYM DIDAL_TOPALIGNED}
  1328.   DIDAL_BOTTOMALIGNED = $00000008;
  1329.   {$EXTERNALSYM DIDAL_BOTTOMALIGNED}
  1330.  
  1331. type
  1332.   PDIDeviceImageInfoA = ^TDIDeviceImageInfoA;
  1333.   PDIDeviceImageInfoW = ^TDIDeviceImageInfoW;
  1334.   PDIDeviceImageInfo = PDIDeviceImageInfoA;
  1335.   _DIDEVICEIMAGEINFOA = packed record
  1336.     tszImagePath: array [0..MAX_PATH-1] of AnsiChar;
  1337.     dwFlags:         DWORD;
  1338.     // These are valid if DIDIFT_OVERLAY is present in dwFlags.
  1339.     dwViewID:        DWORD;
  1340.     rcOverlay:       TRect;
  1341.     dwObjID:         DWORD;
  1342.     dwcValidPts:     DWORD;
  1343.     rgptCalloutLine: array [0..4] of TPoint;
  1344.     rcCalloutRect:   TRect;
  1345.     dwTextAlign:     DWORD;
  1346.   end;
  1347.   {$EXTERNALSYM _DIDEVICEIMAGEINFOA}
  1348.   _DIDEVICEIMAGEINFOW = packed record
  1349.     tszImagePath: array [0..MAX_PATH-1] of WideChar;
  1350.     dwFlags:         DWORD;
  1351.     // These are valid if DIDIFT_OVERLAY is present in dwFlags.
  1352.     dwViewID:        DWORD;
  1353.     rcOverlay:       TRect;
  1354.     dwObjID:         DWORD;
  1355.     dwcValidPts:     DWORD;
  1356.     rgptCalloutLine: array [0..4] of TPoint;
  1357.     rcCalloutRect:   TRect;
  1358.     dwTextAlign:     DWORD;
  1359.   end;
  1360.   {$EXTERNALSYM _DIDEVICEIMAGEINFOW}
  1361.   _DIDEVICEIMAGEINFO = _DIDEVICEIMAGEINFOA;
  1362.   {$EXTERNALSYM _DIDEVICEIMAGEINFO}
  1363.   DIDEVICEIMAGEINFOA = _DIDEVICEIMAGEINFOA;
  1364.   {$EXTERNALSYM DIDEVICEIMAGEINFOA}
  1365.   DIDEVICEIMAGEINFOW = _DIDEVICEIMAGEINFOW;
  1366.   {$EXTERNALSYM DIDEVICEIMAGEINFOW}
  1367.   DIDEVICEIMAGEINFO = DIDEVICEIMAGEINFOA;
  1368.   {$EXTERNALSYM DIDEVICEIMAGEINFO}
  1369.   TDIDeviceImageInfoA = _DIDEVICEIMAGEINFOA;
  1370.   TDIDeviceImageInfoW = _DIDEVICEIMAGEINFOW;
  1371.   TDIDeviceImageInfo = TDIDeviceImageInfoA;
  1372.  
  1373.   PDIDeviceImageInfoHeaderA = ^TDIDeviceImageInfoHeaderA;
  1374.   PDIDeviceImageInfoHeaderW = ^TDIDeviceImageInfoHeaderW;
  1375.   PDIDeviceImageInfoHeader = PDIDeviceImageInfoHeaderA;
  1376.   _DIDEVICEIMAGEINFOHEADERA = packed record
  1377.     dwSize:             DWORD;
  1378.     dwSizeImageInfo:    DWORD;
  1379.     dwcViews:           DWORD;
  1380.     dwcButtons:         DWORD;
  1381.     dwcAxes:            DWORD;
  1382.     dwcPOVs:            DWORD;
  1383.     dwBufferSize:       DWORD;
  1384.     dwBufferUsed:       DWORD;
  1385.     lprgImageInfoArray: PDIDeviceImageInfoA;
  1386.   end;
  1387.   {$EXTERNALSYM _DIDEVICEIMAGEINFOHEADERA}
  1388.   _DIDEVICEIMAGEINFOHEADERW = packed record
  1389.     dwSize:             DWORD;
  1390.     dwSizeImageInfo:    DWORD;
  1391.     dwcViews:           DWORD;
  1392.     dwcButtons:         DWORD;
  1393.     dwcAxes:            DWORD;
  1394.     dwcPOVs:            DWORD;
  1395.     dwBufferSize:       DWORD;
  1396.     dwBufferUsed:       DWORD;
  1397.     lprgImageInfoArray: PDIDeviceImageInfoW;
  1398.   end;
  1399.   {$EXTERNALSYM _DIDEVICEIMAGEINFOHEADERW}
  1400.   _DIDEVICEIMAGEINFOHEADER = _DIDEVICEIMAGEINFOHEADERA;
  1401.   {$EXTERNALSYM _DIDEVICEIMAGEINFOHEADER}
  1402.   DIDEVICEIMAGEINFOHEADERA = _DIDEVICEIMAGEINFOHEADERA;
  1403.   {$EXTERNALSYM _DIDEVICEIMAGEINFOHEADERA}
  1404.   DIDEVICEIMAGEINFOHEADERW = _DIDEVICEIMAGEINFOHEADERW;
  1405.   {$EXTERNALSYM _DIDEVICEIMAGEINFOHEADERW}
  1406.   DIDEVICEIMAGEINFOHEADER = DIDEVICEIMAGEINFOHEADERA;
  1407.   {$EXTERNALSYM _DIDEVICEIMAGEINFOHEADER}
  1408.   TDIDeviceImageInfoHeaderA = _DIDEVICEIMAGEINFOHEADERA;
  1409.   TDIDeviceImageInfoHeaderW = _DIDEVICEIMAGEINFOHEADERW;
  1410.   TDIDeviceImageInfoHeader = TDIDeviceImageInfoHeaderA;
  1411.  
  1412. {$ENDIF} (* DIRECTINPUT_VERSION > 0x0700 *)
  1413.  
  1414. {$IFDEF DIRECTINPUT_VERSION_5} (* #if(DIRECTINPUT_VERSION >= 0x0500) *)
  1415. (* These structures are defined for DirectX 3.0 compatibility *)
  1416.  
  1417. type
  1418.   PDIDeviceObjectInstanceDX3A = ^TDIDeviceObjectInstanceDX3A;
  1419.   PDIDeviceObjectInstanceDX3W = ^TDIDeviceObjectInstanceDX3W;
  1420.   PDIDeviceObjectInstanceDX3 = PDIDeviceObjectInstanceDX3A;
  1421.   DIDEVICEOBJECTINSTANCE_DX3A = packed record
  1422.     dwSize:   DWORD;
  1423.     guidType: TGUID;
  1424.     dwOfs:    DWORD;
  1425.     dwType:   DWORD;
  1426.     dwFlags:  DWORD;
  1427.     tszName: array [0..MAX_PATH-1] of AnsiChar;
  1428.   end;
  1429.   {$EXTERNALSYM DIDEVICEOBJECTINSTANCE_DX3A}
  1430.   DIDEVICEOBJECTINSTANCE_DX3W = packed record
  1431.     dwSize:   DWORD;
  1432.     guidType: TGUID;
  1433.     dwOfs:    DWORD;
  1434.     dwType:   DWORD;
  1435.     dwFlags:  DWORD;
  1436.     tszName: array [0..MAX_PATH-1] of WideChar;
  1437.   end;
  1438.   {$EXTERNALSYM DIDEVICEOBJECTINSTANCE_DX3W}
  1439.   DIDEVICEOBJECTINSTANCE_DX3 = DIDEVICEOBJECTINSTANCE_DX3A;
  1440.   {$EXTERNALSYM DIDEVICEOBJECTINSTANCE_DX3}
  1441.   TDIDeviceObjectInstanceDX3A = DIDEVICEOBJECTINSTANCE_DX3A;
  1442.   TDIDeviceObjectInstanceDX3W = DIDEVICEOBJECTINSTANCE_DX3W;
  1443.   TDIDeviceObjectInstanceDX3 = TDIDeviceObjectInstanceDX3A;
  1444.  
  1445. {$ENDIF} (* DIRECTINPUT_VERSION >= 0x0500 *)
  1446.  
  1447. type
  1448.   PDIDeviceObjectInstanceA = ^TDIDeviceObjectInstanceA;
  1449.   PDIDeviceObjectInstanceW = ^TDIDeviceObjectInstanceW;
  1450.   PDIDeviceObjectInstance = PDIDeviceObjectInstanceA;
  1451.   DIDEVICEOBJECTINSTANCEA = packed record
  1452.     dwSize:              DWORD;
  1453.     guidType:            TGUID;
  1454.     dwOfs:               DWORD;
  1455.     dwType:              DWORD;
  1456.     dwFlags:             DWORD;
  1457.     tszName: array[0..MAX_PATH-1] of AnsiChar;
  1458. {$IFDEF DIRECTINPUT_VERSION_5} (* #if(DIRECTINPUT_VERSION >= 0x0500) *)
  1459.     dwFFMaxForce:        DWORD;
  1460.     dwFFForceResolution: DWORD;
  1461.     wCollectionNumber:   Word;
  1462.     wDesignatorIndex:    Word;
  1463.     wUsagePage:          Word;
  1464.     wUsage:              Word;
  1465.     dwDimension:         DWORD;
  1466.     wExponent:           Word;
  1467.     wReportId:           Word;
  1468. {$ENDIF} (* DIRECTINPUT_VERSION >= 0x0500 *)
  1469.   end;
  1470.   {$EXTERNALSYM DIDEVICEOBJECTINSTANCEA}
  1471.   DIDEVICEOBJECTINSTANCEW = packed record
  1472.     dwSize:              DWORD;
  1473.     guidType:            TGUID;
  1474.     dwOfs:               DWORD;
  1475.     dwType:              DWORD;
  1476.     dwFlags:             DWORD;
  1477.     tszName: array[0..MAX_PATH-1] of WideChar;
  1478. {$IFDEF DIRECTINPUT_VERSION_5} (* #if(DIRECTINPUT_VERSION >= 0x0500) *)
  1479.     dwFFMaxForce:        DWORD;
  1480.     dwFFForceResolution: DWORD;
  1481.     wCollectionNumber:   Word;
  1482.     wDesignatorIndex:    Word;
  1483.     wUsagePage:          Word;
  1484.     wUsage:              Word;
  1485.     dwDimension:         DWORD;
  1486.     wExponent:           Word;
  1487.     wReportId:           Word;
  1488. {$ENDIF} (* DIRECTINPUT_VERSION >= 0x0500 *)
  1489.   end;
  1490.   {$EXTERNALSYM DIDEVICEOBJECTINSTANCEW}
  1491.   DIDEVICEOBJECTINSTANCE = DIDEVICEOBJECTINSTANCEA;
  1492.   {$EXTERNALSYM DIDEVICEOBJECTINSTANCE}
  1493.   TDIDeviceObjectInstanceA = DIDEVICEOBJECTINSTANCEA;
  1494.   TDIDeviceObjectInstanceW = DIDEVICEOBJECTINSTANCEW;
  1495.   TDIDeviceObjectInstance = TDIDeviceObjectInstanceA;
  1496.  
  1497.  
  1498. type
  1499.   TDIEnumDeviceObjectsCallbackA = function (var lpddoi: TDIDeviceObjectInstanceA; pvRef : Pointer): BOOL; stdcall;
  1500.   {$EXTERNALSYM TDIEnumDeviceObjectsCallbackA}
  1501.   TDIEnumDeviceObjectsCallbackW = function (var lpddoi: TDIDeviceObjectInstanceW; pvRef : Pointer): BOOL; stdcall;
  1502.   {$EXTERNALSYM TDIEnumDeviceObjectsCallbackW}
  1503.   TDIEnumDeviceObjectsCallback = TDIEnumDeviceObjectsCallbackA;
  1504.   {$EXTERNALSYM TDIEnumDeviceObjectsCallback}
  1505.  
  1506.  
  1507. {$IFDEF DIRECTINPUT_VERSION_5} (* #if(DIRECTINPUT_VERSION >= 0x0500) *)
  1508. const
  1509.   DIDOI_FFACTUATOR        = $00000001;
  1510.   {$EXTERNALSYM DIDOI_FFACTUATOR}
  1511.   DIDOI_FFEFFECTTRIGGER   = $00000002;
  1512.   {$EXTERNALSYM DIDOI_FFEFFECTTRIGGER}
  1513.   DIDOI_POLLED            = $00008000;
  1514.   {$EXTERNALSYM DIDOI_POLLED}
  1515.   DIDOI_ASPECTPOSITION    = $00000100;
  1516.   {$EXTERNALSYM DIDOI_ASPECTPOSITION}
  1517.   DIDOI_ASPECTVELOCITY    = $00000200;
  1518.   {$EXTERNALSYM DIDOI_ASPECTVELOCITY}
  1519.   DIDOI_ASPECTACCEL       = $00000300;
  1520.   {$EXTERNALSYM DIDOI_ASPECTACCEL}
  1521.   DIDOI_ASPECTFORCE       = $00000400;
  1522.   {$EXTERNALSYM DIDOI_ASPECTFORCE}
  1523.   DIDOI_ASPECTMASK        = $00000F00;
  1524.   {$EXTERNALSYM DIDOI_ASPECTMASK}
  1525. {$ENDIF} (* DIRECTINPUT_VERSION >= 0x0500 *)
  1526. {$IFDEF DIRECTINPUT_VERSION_5b} (* #if(DIRECTINPUT_VERSION >= 0x050a) *)
  1527.   DIDOI_GUIDISUSAGE       = $00010000;
  1528.   {$EXTERNALSYM DIDOI_GUIDISUSAGE}
  1529. {$ENDIF} (* DIRECTINPUT_VERSION >= 0x050a *)
  1530.  
  1531. type
  1532.   PDIPropHeader = ^TDIPropHeader;
  1533.   DIPROPHEADER = packed record
  1534.     dwSize: DWORD;
  1535.     dwHeaderSize: DWORD;
  1536.     dwObj: DWORD;
  1537.     dwHow: DWORD;
  1538.   end;
  1539.   {$EXTERNALSYM DIPROPHEADER}
  1540.   TDIPropHeader = DIPROPHEADER;
  1541.  
  1542. const
  1543.   DIPH_DEVICE             = 0;
  1544.   {$EXTERNALSYM DIPH_DEVICE}
  1545.   DIPH_BYOFFSET           = 1;
  1546.   {$EXTERNALSYM DIPH_BYOFFSET}
  1547.   DIPH_BYID               = 2;
  1548.   {$EXTERNALSYM DIPH_BYID}
  1549. {$IFDEF DIRECTINPUT_VERSION_5b} (* #if(DIRECTINPUT_VERSION >= 0x050a) *)
  1550.   DIPH_BYUSAGE            = 3;
  1551.   {$EXTERNALSYM DIPH_BYUSAGE}
  1552. {$ENDIF} (* DIRECTINPUT_VERSION >= 0x050a *)
  1553.  
  1554. {$IFDEF DIRECTINPUT_VERSION_5b} (* #if(DIRECTINPUT_VERSION >= 0x050a) *)
  1555. // #define DIMAKEUSAGEDWORD(UsagePage, Usage) \
  1556. //                                 (DWORD)MAKELONG(Usage, UsagePage)
  1557. function DIMAKEUSAGEDWORD(UsagePage, Usage: Word): DWORD;
  1558. {$EXTERNALSYM DIMAKEUSAGEDWORD}
  1559. {$ENDIF} (* DIRECTINPUT_VERSION >= 0x050a *)
  1560.  
  1561. type
  1562.   PDIPropDWord = ^TDIPropDWord;
  1563.   DIPROPDWORD = packed record
  1564.     diph: TDIPropHeader;
  1565.     dwData: DWORD;
  1566.   end;
  1567.   {$EXTERNALSYM DIPROPDWORD}
  1568.   TDIPropDWord = DIPROPDWORD;
  1569.  
  1570. {$IFDEF DIRECTINPUT_VERSION_8} (* #if(DIRECTINPUT_VERSION >= 0x0800) *)
  1571.   PDIPropPointer = ^TDIPropPointer;
  1572.   DIPROPPOINTER = packed record
  1573.     diph: TDIPropHeader;
  1574.     uData: Pointer;
  1575.   end;
  1576.   {$EXTERNALSYM DIPROPPOINTER}
  1577.   TDIPropPointer = DIPROPPOINTER;
  1578. {$ENDIF} (* DIRECTINPUT_VERSION >= 0x0800 *)
  1579.  
  1580.   PDIPropRange = ^TDIPropRange;
  1581.   DIPROPRANGE = packed record
  1582.     diph: TDIPropHeader;
  1583.     lMin: Longint;
  1584.     lMax: Longint;
  1585.   end;
  1586.   {$EXTERNALSYM DIPROPRANGE}
  1587.   TDIPropRange = DIPROPRANGE;
  1588.  
  1589. const
  1590.   DIPROPRANGE_NOMIN       = $80000000;
  1591.   {$EXTERNALSYM DIPROPRANGE_NOMIN}
  1592.   DIPROPRANGE_NOMAX       = $7FFFFFFF;
  1593.   {$EXTERNALSYM DIPROPRANGE_NOMAX}
  1594.  
  1595. {$IFDEF DIRECTINPUT_VERSION_5b} (* #if(DIRECTINPUT_VERSION >= 0x050a) *)
  1596. type
  1597.   PDIPropCal = ^TDIPropCal;
  1598.   DIPROPCAL = packed record
  1599.     diph: TDIPropHeader;
  1600.     lMin: Longint;
  1601.     lCenter: Longint;
  1602.     lMax: Longint;
  1603.   end;
  1604.   {$EXTERNALSYM DIPROPCAL}
  1605.   TDIPropCal = DIPROPCAL;
  1606.  
  1607.   PDIPropCalPov = ^TDIPropCalPov;
  1608.   DIPROPCALPOV = packed record
  1609.     diph: TDIPropHeader;
  1610.     lMin: array[0..4] of Longint;
  1611.     lMax: array[0..4] of Longint;
  1612.   end;
  1613.   {$EXTERNALSYM DIPROPCALPOV}
  1614.   TDIPropCalPov = DIPROPCALPOV;
  1615.  
  1616.   PDIPropGuidAndPath = ^TDIPropGuidAndPath;
  1617.   DIPROPGUIDANDPATH = packed record
  1618.     diph: TDIPropHeader;
  1619.     guidClass: TGUID;
  1620.     wszPath: array[0..MAX_PATH-1] of WideChar;
  1621.   end;
  1622.   {$EXTERNALSYM DIPROPGUIDANDPATH}
  1623.   TDIPropGuidAndPath = DIPROPGUIDANDPATH;
  1624.  
  1625.   PDIPropString = ^TDIPropString;
  1626.   DIPROPSTRING = packed record
  1627.     diph: TDIPropHeader;
  1628.     wsz: array[0..MAX_PATH-1] of WideChar;
  1629.   end;
  1630.   {$EXTERNALSYM DIPROPSTRING}
  1631.   TDIPropString = DIPROPSTRING;
  1632.  
  1633. {$ENDIF} (* DIRECTINPUT_VERSION >= 0x050a *)
  1634.  
  1635. {$IFDEF DIRECTINPUT_VERSION_8} (* #if(DIRECTINPUT_VERSION >= 0x0800) *)
  1636. const
  1637.   MAXCPOINTSNUM          = 8;
  1638.   {$EXTERNALSYM MAXCPOINTSNUM}
  1639.  
  1640. type
  1641.   PCPoint = ^TCPoint;
  1642.   _CPOINT = packed record
  1643.     lP: Longint;   // raw value
  1644.     dwLog: DWORD;  // logical_value / max_logical_value * 10000
  1645.   end;
  1646.   {$EXTERNALSYM _CPOINT}
  1647.   CPOINT = _CPOINT;
  1648.   {$EXTERNALSYM CPOINT}
  1649.   TCPoint = _CPOINT;
  1650.  
  1651.   PDIPropCPoints = ^TDIPropCPoints;
  1652.   DIPROPCPOINTS = packed record
  1653.     diph: TDIPropHeader;
  1654.     dwCPointsNum: DWORD;
  1655.     cp: array[0..MAXCPOINTSNUM-1] of TCPoint;
  1656.   end;
  1657.   {$EXTERNALSYM DIPROPCPOINTS}
  1658.   TDIPropCPoints = DIPROPCPOINTS;
  1659. {$ENDIF} (* DIRECTINPUT_VERSION >= 0x0800 *)
  1660.  
  1661.  
  1662. // #define MAKEDIPROP(prop)    (*(const GUID *)(prop))
  1663.  
  1664. type
  1665.   MAKEDIPROP = PGUID;
  1666.   {$EXTERNALSYM MAKEDIPROP}
  1667.  
  1668. const
  1669.   DIPROP_BUFFERSIZE       = MAKEDIPROP(1);
  1670.   {$EXTERNALSYM DIPROP_BUFFERSIZE}
  1671.  
  1672.   DIPROP_AXISMODE         = MAKEDIPROP(2);
  1673.   {$EXTERNALSYM DIPROP_AXISMODE}
  1674.  
  1675.   DIPROPAXISMODE_ABS      = 0;
  1676.   {$EXTERNALSYM DIPROPAXISMODE_ABS}
  1677.   DIPROPAXISMODE_REL      = 1;
  1678.   {$EXTERNALSYM DIPROPAXISMODE_REL}
  1679.  
  1680.   DIPROP_GRANULARITY      = MAKEDIPROP(3);
  1681.   {$EXTERNALSYM DIPROP_GRANULARITY}
  1682.  
  1683.   DIPROP_RANGE            = MAKEDIPROP(4);
  1684.   {$EXTERNALSYM DIPROP_RANGE}
  1685.  
  1686.   DIPROP_DEADZONE         = MAKEDIPROP(5);
  1687.   {$EXTERNALSYM DIPROP_DEADZONE}
  1688.  
  1689.   DIPROP_SATURATION       = MAKEDIPROP(6);
  1690.   {$EXTERNALSYM DIPROP_SATURATION}
  1691.  
  1692.   DIPROP_FFGAIN           = MAKEDIPROP(7);
  1693.   {$EXTERNALSYM DIPROP_FFGAIN}
  1694.  
  1695.   DIPROP_FFLOAD           = MAKEDIPROP(8);
  1696.   {$EXTERNALSYM DIPROP_FFLOAD}
  1697.  
  1698.   DIPROP_AUTOCENTER       = MAKEDIPROP(9);
  1699.   {$EXTERNALSYM DIPROP_AUTOCENTER}
  1700.  
  1701.   DIPROPAUTOCENTER_OFF    = 0;
  1702.   {$EXTERNALSYM DIPROPAUTOCENTER_OFF}
  1703.   DIPROPAUTOCENTER_ON     = 1;
  1704.   {$EXTERNALSYM DIPROPAUTOCENTER_ON}
  1705.  
  1706.   DIPROP_CALIBRATIONMODE  = MAKEDIPROP(10);
  1707.   {$EXTERNALSYM DIPROP_CALIBRATIONMODE}
  1708.  
  1709.   DIPROPCALIBRATIONMODE_COOKED    = 0;
  1710.   {$EXTERNALSYM DIPROPCALIBRATIONMODE_COOKED}
  1711.   DIPROPCALIBRATIONMODE_RAW       = 1;
  1712.   {$EXTERNALSYM DIPROPCALIBRATIONMODE_RAW}
  1713.  
  1714. {$IFDEF DIRECTINPUT_VERSION_5b} (* #if(DIRECTINPUT_VERSION >= 0x050a) *)
  1715.   DIPROP_CALIBRATION      = MAKEDIPROP(11);
  1716.   {$EXTERNALSYM DIPROP_CALIBRATION}
  1717.  
  1718.   DIPROP_GUIDANDPATH      = MAKEDIPROP(12);
  1719.   {$EXTERNALSYM DIPROP_GUIDANDPATH}
  1720.  
  1721.   DIPROP_INSTANCENAME     = MAKEDIPROP(13);
  1722.   {$EXTERNALSYM DIPROP_INSTANCENAME}
  1723.  
  1724.   DIPROP_PRODUCTNAME      = MAKEDIPROP(14);
  1725.   {$EXTERNALSYM DIPROP_PRODUCTNAME}
  1726. {$ENDIF} (* DIRECTINPUT_VERSION >= 0x050a *)
  1727.  
  1728. {$IFDEF DIRECTINPUT_VERSION_5b} (* #if(DIRECTINPUT_VERSION >= 0x05b2) *)
  1729.   DIPROP_JOYSTICKID       = MAKEDIPROP(15);
  1730.   {$EXTERNALSYM DIPROP_JOYSTICKID}
  1731.  
  1732.   DIPROP_GETPORTDISPLAYNAME = MAKEDIPROP(16);
  1733.   {$EXTERNALSYM DIPROP_GETPORTDISPLAYNAME}
  1734.  
  1735. {$ENDIF} (* DIRECTINPUT_VERSION >= 0x05b2 *)
  1736.  
  1737. {$IFDEF DIRECTINPUT_VERSION_7} (* #if(DIRECTINPUT_VERSION >= 0x0700) *)
  1738.   DIPROP_PHYSICALRANGE    = MAKEDIPROP(18);
  1739.   {$EXTERNALSYM DIPROP_PHYSICALRANGE}
  1740.  
  1741.   DIPROP_LOGICALRANGE     = MAKEDIPROP(19);
  1742.   {$EXTERNALSYM DIPROP_LOGICALRANGE}
  1743. {$ENDIF} (* DIRECTINPUT_VERSION >= 0x0700 *)
  1744.  
  1745. {$IFDEF DIRECTINPUT_VERSION_8} (* #if(DIRECTINPUT_VERSION >= 0x0800) *)
  1746.   DIPROP_KEYNAME          = MAKEDIPROP(20);
  1747.   {$EXTERNALSYM DIPROP_KEYNAME}
  1748.  
  1749.   DIPROP_CPOINTS          = MAKEDIPROP(21);
  1750.   {$EXTERNALSYM DIPROP_CPOINTS}
  1751.  
  1752.   DIPROP_APPDATA          = MAKEDIPROP(22);
  1753.   {$EXTERNALSYM DIPROP_APPDATA}
  1754.  
  1755.   DIPROP_SCANCODE         = MAKEDIPROP(23);
  1756.   {$EXTERNALSYM DIPROP_SCANCODE}
  1757.  
  1758.   DIPROP_VIDPID           = MAKEDIPROP(24);
  1759.   {$EXTERNALSYM DIPROP_VIDPID}
  1760.  
  1761.   DIPROP_USERNAME         = MAKEDIPROP(25);
  1762.   {$EXTERNALSYM DIPROP_USERNAME}
  1763.  
  1764.   DIPROP_TYPENAME         = MAKEDIPROP(26);
  1765.   {$EXTERNALSYM DIPROP_TYPENAME}
  1766. {$ENDIF} (* DIRECTINPUT_VERSION >= 0x0800 *)
  1767.  
  1768.  
  1769. type
  1770.   PDIDeviceObjectDataDX3 = ^TDIDeviceObjectDataDX3;
  1771.   DIDEVICEOBJECTDATA_DX3 = packed record
  1772.     dwOfs: DWORD;
  1773.     dwData: DWORD;
  1774.     dwTimeStamp: DWORD;
  1775.     dwSequence: DWORD;
  1776.   end;
  1777.   {$EXTERNALSYM DIDEVICEOBJECTDATA_DX3}
  1778.   TDIDeviceObjectDataDX3 = DIDEVICEOBJECTDATA_DX3;
  1779.  
  1780.   PDIDeviceObjectData = ^TDIDeviceObjectData;
  1781.   DIDEVICEOBJECTDATA = packed record
  1782.     dwOfs: DWORD;
  1783.     dwData: DWORD;
  1784.     dwTimeStamp: DWORD;
  1785.     dwSequence: DWORD;
  1786. {$IFDEF DIRECTINPUT_VERSION_8} (* #if(DIRECTINPUT_VERSION >= 0x0800) *)
  1787.     uAppData: Pointer;
  1788. {$ENDIF} (* DIRECTINPUT_VERSION >= 0x0800 *)
  1789.   end;
  1790.   {$EXTERNALSYM DIDEVICEOBJECTDATA}
  1791.   TDIDeviceObjectData = DIDEVICEOBJECTDATA;
  1792.  
  1793. const
  1794.   DIGDD_PEEK          = $00000001;
  1795.   {$EXTERNALSYM DIGDD_PEEK}
  1796.  
  1797. // #define DISEQUENCE_COMPARE(dwSequence1, cmp, dwSequence2) \
  1798. //                         ((int)((dwSequence1) - (dwSequence2)) cmp 0)
  1799. // Translator: This is not convertable to pascal   
  1800.  
  1801. const
  1802.   DISCL_EXCLUSIVE     = $00000001;
  1803.   {$EXTERNALSYM DISCL_EXCLUSIVE}
  1804.   DISCL_NONEXCLUSIVE  = $00000002;
  1805.   {$EXTERNALSYM DISCL_NONEXCLUSIVE}
  1806.   DISCL_FOREGROUND    = $00000004;
  1807.   {$EXTERNALSYM DISCL_FOREGROUND}
  1808.   DISCL_BACKGROUND    = $00000008;
  1809.   {$EXTERNALSYM DISCL_BACKGROUND}
  1810.   DISCL_NOWINKEY      = $00000010;
  1811.   {$EXTERNALSYM DISCL_NOWINKEY}
  1812.  
  1813. {$IFDEF DIRECTINPUT_VERSION_5} (* #if(DIRECTINPUT_VERSION >= 0x0500) *)
  1814. (* These structures are defined for DirectX 3.0 compatibility *)
  1815.  
  1816. type
  1817.   PDIDeviceInstanceDX3A = ^TDIDeviceInstanceDX3A;
  1818.   PDIDeviceInstanceDX3W = ^TDIDeviceInstanceDX3W;
  1819.   PDIDeviceInstanceDX3 = PDIDeviceInstanceDX3A;
  1820.   DIDEVICEINSTANCE_DX3A = packed record
  1821.     dwSize: DWORD;
  1822.     guidInstance: TGUID;
  1823.     guidProduct: TGUID;
  1824.     dwDevType: DWORD;
  1825.     tszInstanceName: array[0..MAX_PATH-1] of AnsiChar;
  1826.     tszProductName: array[0..MAX_PATH-1] of AnsiChar;
  1827.   end;
  1828.   {$EXTERNALSYM DIDEVICEINSTANCE_DX3A}
  1829.   DIDEVICEINSTANCE_DX3W = packed record
  1830.     dwSize: DWORD;
  1831.     guidInstance: TGUID;
  1832.     guidProduct: TGUID;
  1833.     dwDevType: DWORD;
  1834.     tszInstanceName: array[0..MAX_PATH-1] of WideChar;
  1835.     tszProductName: array[0..MAX_PATH-1] of WideChar;
  1836.   end;
  1837.   {$EXTERNALSYM DIDEVICEINSTANCE_DX3W}
  1838.   DIDEVICEINSTANCE_DX3 = DIDEVICEINSTANCE_DX3A;
  1839.   {$EXTERNALSYM DIDEVICEINSTANCE_DX3}
  1840.   TDIDeviceInstanceDX3A = DIDEVICEINSTANCE_DX3A;
  1841.   TDIDeviceInstanceDX3W = DIDEVICEINSTANCE_DX3W;
  1842.   TDIDeviceInstanceDX3 = TDIDeviceInstanceDX3A;
  1843. {$ENDIF} (* DIRECTINPUT_VERSION >= 0x0500 *)
  1844.  
  1845. type
  1846.   PDIDeviceInstanceA = ^TDIDeviceInstanceA;
  1847.   PDIDeviceInstanceW = ^TDIDeviceInstanceW;
  1848.   PDIDeviceInstance = PDIDeviceInstanceA;
  1849.   DIDEVICEINSTANCEA = packed record
  1850.     dwSize: DWORD;
  1851.     guidInstance: TGUID;
  1852.     guidProduct: TGUID;
  1853.     dwDevType: DWORD;
  1854.     tszInstanceName: array[0..MAX_PATH-1] of AnsiChar;
  1855.     tszProductName: array[0..MAX_PATH-1] of AnsiChar;
  1856. {$IFDEF DIRECTINPUT_VERSION_5} (* #if(DIRECTINPUT_VERSION >= 0x0500) *)
  1857.     guidFFDriver: TGUID;
  1858.     wUsagePage: Word;
  1859.     wUsage: Word;
  1860. {$ENDIF} (* DIRECTINPUT_VERSION >= 0x0500 *)
  1861.   end;
  1862.   {$EXTERNALSYM DIDEVICEINSTANCEA}
  1863.   DIDEVICEINSTANCEW = packed record
  1864.     dwSize: DWORD;
  1865.     guidInstance: TGUID;
  1866.     guidProduct: TGUID;
  1867.     dwDevType: DWORD;
  1868.     tszInstanceName: array[0..MAX_PATH-1] of WideChar;
  1869.     tszProductName: array[0..MAX_PATH-1] of WideChar;
  1870. {$IFDEF DIRECTINPUT_VERSION_5} (* #if(DIRECTINPUT_VERSION >= 0x0500) *)
  1871.     guidFFDriver: TGUID;
  1872.     wUsagePage: Word;
  1873.     wUsage: Word;
  1874. {$ENDIF} (* DIRECTINPUT_VERSION >= 0x0500 *)
  1875.   end;
  1876.   {$EXTERNALSYM DIDEVICEINSTANCEW}
  1877.   DIDEVICEINSTANCE = DIDEVICEINSTANCEA;
  1878.   {$EXTERNALSYM DIDEVICEINSTANCE}
  1879.   TDIDeviceInstanceA = DIDEVICEINSTANCEA;
  1880.   TDIDeviceInstanceW = DIDEVICEINSTANCEW;
  1881.   TDIDeviceInstance = TDIDeviceInstanceA;
  1882.  
  1883.  
  1884. type
  1885.   {$EXTERNALSYM IDirectInputDeviceA}
  1886.   IDirectInputDeviceA = interface(IUnknown)
  1887.     [SID_IDirectInputDeviceA]
  1888.     (*** IDirectInputDeviceA methods ***)
  1889.     function GetCapabilities(var lpDIDevCaps: TDIDevCaps): HResult; stdcall;
  1890.     function EnumObjects(lpCallback: TDIEnumDeviceObjectsCallbackA; pvRef: Pointer; dwFlags: DWORD): HResult; stdcall;
  1891.     function GetProperty(rguidProp: PGUID; var pdiph: TDIPropHeader): HResult; stdcall;
  1892.     function SetProperty(rguidProp: PGUID; const pdiph: TDIPropHeader): HResult; stdcall;
  1893.     function Acquire: HResult; stdcall;
  1894.     function Unacquire: HResult; stdcall;
  1895.     function GetDeviceState(cbData: DWORD; lpvData: Pointer): HResult; stdcall;
  1896.     function GetDeviceData(cbObjectData: DWORD; rgdod: PDIDeviceObjectData; out pdwInOut: DWORD; dwFlags: DWORD): HResult; stdcall;
  1897.     function SetDataFormat(var lpdf: TDIDataFormat): HResult; stdcall;
  1898.     function SetEventNotification(hEvent: THandle): HResult; stdcall;
  1899.     function SetCooperativeLevel(hwnd: HWND; dwFlags: DWORD): HResult; stdcall;
  1900.     function GetObjectInfo(var pdidoi: TDIDeviceObjectInstanceA; dwObj, dwHow: DWORD): HResult; stdcall;
  1901.     function GetDeviceInfo(var pdidi: TDIDeviceInstanceA): HResult; stdcall;
  1902.     function RunControlPanel(hwndOwner: HWND; dwFlags: DWORD): HResult; stdcall;
  1903.     function Initialize(hinst: THandle; dwVersion: DWORD; const rguid: TGUID): HResult; stdcall;
  1904.   end;
  1905.  
  1906.   {$EXTERNALSYM IDirectInputDeviceW}
  1907.   IDirectInputDeviceW = interface(IUnknown)
  1908.     [SID_IDirectInputDeviceW]
  1909.     (*** IDirectInputDeviceW methods ***)
  1910.     function GetCapabilities(var lpDIDevCaps: TDIDevCaps): HResult; stdcall;
  1911.     function EnumObjects(lpCallback: TDIEnumDeviceObjectsCallbackW; pvRef: Pointer; dwFlags: DWORD): HResult; stdcall;
  1912.     function GetProperty(rguidProp: PGUID; var pdiph: TDIPropHeader): HResult; stdcall;
  1913.     function SetProperty(rguidProp: PGUID; const pdiph: TDIPropHeader): HResult; stdcall;
  1914.     function Acquire: HResult; stdcall;
  1915.     function Unacquire: HResult; stdcall;
  1916.     function GetDeviceState(cbData: DWORD; lpvData: Pointer): HResult; stdcall;
  1917.     function GetDeviceData(cbObjectData: DWORD; rgdod: PDIDeviceObjectData; out pdwInOut: DWORD; dwFlags: DWORD): HResult; stdcall;
  1918.     function SetDataFormat(var lpdf: TDIDataFormat): HResult; stdcall;
  1919.     function SetEventNotification(hEvent: THandle): HResult; stdcall;
  1920.     function SetCooperativeLevel(hwnd: HWND; dwFlags: DWORD): HResult; stdcall;
  1921.     function GetObjectInfo(var pdidoi: TDIDeviceObjectInstanceW; dwObj, dwHow: DWORD): HResult; stdcall;
  1922.     function GetDeviceInfo(var pdidi: TDIDeviceInstanceW): HResult; stdcall;
  1923.     function RunControlPanel(hwndOwner: HWND; dwFlags: DWORD): HResult; stdcall;
  1924.     function Initialize(hinst: THandle; dwVersion: DWORD; const rguid: TGUID): HResult; stdcall;
  1925.   end;
  1926.  
  1927.   {$EXTERNALSYM IDirectInputDevice}
  1928.   IDirectInputDevice = IDirectInputDeviceA;
  1929. type
  1930.   IID_IDirectInputDevice = IDirectInputDevice;
  1931.   {$EXTERNALSYM IID_IDirectInputDevice}
  1932.  
  1933. {$IFDEF DIRECTINPUT_VERSION_5} (* #if(DIRECTINPUT_VERSION >= 0x0500) *)
  1934.  
  1935. const
  1936.   DISFFC_RESET            = $00000001;
  1937.   {$EXTERNALSYM DISFFC_RESET}
  1938.   DISFFC_STOPALL          = $00000002;
  1939.   {$EXTERNALSYM DISFFC_STOPALL}
  1940.   DISFFC_PAUSE            = $00000004;
  1941.   {$EXTERNALSYM DISFFC_PAUSE}
  1942.   DISFFC_CONTINUE         = $00000008;
  1943.   {$EXTERNALSYM DISFFC_CONTINUE}
  1944.   DISFFC_SETACTUATORSON   = $00000010;
  1945.   {$EXTERNALSYM DISFFC_SETACTUATORSON}
  1946.   DISFFC_SETACTUATORSOFF  = $00000020;
  1947.   {$EXTERNALSYM DISFFC_SETACTUATORSOFF}
  1948.  
  1949.   DIGFFS_EMPTY            = $00000001;
  1950.   {$EXTERNALSYM DIGFFS_EMPTY}
  1951.   DIGFFS_STOPPED          = $00000002;
  1952.   {$EXTERNALSYM DIGFFS_STOPPED}
  1953.   DIGFFS_PAUSED           = $00000004;
  1954.   {$EXTERNALSYM DIGFFS_PAUSED}
  1955.   DIGFFS_ACTUATORSON      = $00000010;
  1956.   {$EXTERNALSYM DIGFFS_ACTUATORSON}
  1957.   DIGFFS_ACTUATORSOFF     = $00000020;
  1958.   {$EXTERNALSYM DIGFFS_ACTUATORSOFF}
  1959.   DIGFFS_POWERON          = $00000040;
  1960.   {$EXTERNALSYM DIGFFS_POWERON}
  1961.   DIGFFS_POWEROFF         = $00000080;
  1962.   {$EXTERNALSYM DIGFFS_POWEROFF}
  1963.   DIGFFS_SAFETYSWITCHON   = $00000100;
  1964.   {$EXTERNALSYM DIGFFS_SAFETYSWITCHON}
  1965.   DIGFFS_SAFETYSWITCHOFF  = $00000200;
  1966.   {$EXTERNALSYM DIGFFS_SAFETYSWITCHOFF}
  1967.   DIGFFS_USERFFSWITCHON   = $00000400;
  1968.   {$EXTERNALSYM DIGFFS_USERFFSWITCHON}
  1969.   DIGFFS_USERFFSWITCHOFF  = $00000800;
  1970.   {$EXTERNALSYM DIGFFS_USERFFSWITCHOFF}
  1971.   DIGFFS_DEVICELOST       = $80000000;
  1972.   {$EXTERNALSYM DIGFFS_DEVICELOST}
  1973.  
  1974. type
  1975.   PDIEffectInfoA = ^TDIEffectInfoA;
  1976.   PDIEffectInfoW = ^TDIEffectInfoW;
  1977.   PDIEffectInfo = PDIEffectInfoA;
  1978.   DIEFFECTINFOA = packed record
  1979.     dwSize: DWORD;
  1980.     guid: TGUID;
  1981.     dwEffType: DWORD;
  1982.     dwStaticParams: DWORD;
  1983.     dwDynamicParams: DWORD;
  1984.     tszName: array[0..MAX_PATH-1] of AnsiChar;
  1985.   end;
  1986.   {$EXTERNALSYM DIEFFECTINFOA}
  1987.   DIEFFECTINFOW = packed record
  1988.     dwSize: DWORD;
  1989.     guid: TGUID;
  1990.     dwEffType: DWORD;
  1991.     dwStaticParams: DWORD;
  1992.     dwDynamicParams: DWORD;
  1993.     tszName: array[0..MAX_PATH-1] of WideChar;
  1994.   end;
  1995.   {$EXTERNALSYM DIEFFECTINFOW}
  1996.   DIEFFECTINFO = DIEFFECTINFOA;
  1997.   {$EXTERNALSYM DIEFFECTINFO}
  1998.   TDIEffectInfoA = DIEFFECTINFOA;
  1999.   TDIEffectInfoW = DIEFFECTINFOW;
  2000.   TDIEffectInfo = TDIEffectInfoA;
  2001.  
  2002. const
  2003.   DISDD_CONTINUE          = $00000001;
  2004.   {$EXTERNALSYM DISDD_CONTINUE}
  2005.  
  2006. type
  2007.   TDIEnumEffectsCallbackA = function (var pdei: TDIEffectInfoA; pvRef: Pointer): BOOL; stdcall;
  2008.   {$NODEFINE TDIEnumEffectsCallbackA}
  2009.   (*$HPPEMIT 'typedef LPDIENUMEFFECTSCALLBACKA TDIEnumEffectsCallbackA;'*)
  2010.   TDIEnumEffectsCallbackW = function (var pdei: TDIEffectInfoW; pvRef: Pointer): BOOL; stdcall;
  2011.   {$NODEFINE TDIEnumEffectsCallbackW}
  2012.   (*$HPPEMIT 'typedef LPDIENUMEFFECTSCALLBACKW TDIEnumEffectsCallbackW;'*)
  2013.   TDIEnumEffectsCallback = TDIEnumEffectsCallbackA;
  2014.   {$NODEFINE TDIEnumEffectsCallback}
  2015.   {$HPPEMIT 'typedef LPDIENUMEFFECTSINFILECALLBACK TDIEnumEffectsInFileCallback;'}
  2016.   TDIEnumCreatedEffectObjectsCallback = function (peff : IDirectInputEffect; pvRev: Pointer): BOOL; stdcall;
  2017.   {$NODEFINE TDIEnumCreatedEffectObjectsCallback}
  2018.   {$HPPEMIT 'typedef LPDIENUMCREATEDEFFECTOBJECTSCALLBACK TDIEnumCreatedEffectObjectsCallback;'}
  2019.  
  2020.   {$EXTERNALSYM IDirectInputDevice2A}
  2021.   IDirectInputDevice2A = interface(IDirectInputDeviceA)
  2022.     [SID_IDirectInputDevice2A]
  2023.     (*** IDirectInputDevice2A methods ***)
  2024.     function CreateEffect(const rguid: TGUID; lpeff: PDIEffect; out ppdeff: IDirectInputEffect; punkOuter: IUnknown): HResult; stdcall;
  2025.     function EnumEffects(lpCallback: TDIEnumEffectsCallbackA; pvRef: Pointer; dwEffType: DWORD): HResult; stdcall;
  2026.     function GetEffectInfo(var pdei: TDIEffectInfoA; const rguid: TGUID): HResult; stdcall;
  2027.     function GetForceFeedbackState(out pdwOut: DWORD): HResult; stdcall;
  2028.     function SendForceFeedbackCommand(dwFlags: DWORD): HResult; stdcall;
  2029.     function EnumCreatedEffectObjects(lpCallback: TDIEnumCreatedEffectObjectsCallback; pvRef: Pointer; fl: DWORD): HResult; stdcall;
  2030.     function Escape(var pesc: TDIEffEscape): HResult; stdcall;
  2031.     function Poll: HResult; stdcall;
  2032.     function SendDeviceData(cbObjectData: DWORD; rgdod: PDIDeviceObjectData; var pdwInOut: DWORD; fl: DWORD): HResult; stdcall;
  2033.   end;
  2034.  
  2035.   {$EXTERNALSYM IDirectInputDevice2W}
  2036.   IDirectInputDevice2W = interface(IDirectInputDeviceW)
  2037.     [SID_IDirectInputDevice2W]
  2038.     (*** IDirectInputDevice2W methods ***)
  2039.     function CreateEffect(const rguid: TGUID; lpeff: PDIEffect; out ppdeff: IDirectInputEffect; punkOuter: IUnknown): HResult; stdcall;
  2040.     function EnumEffects(lpCallback: TDIEnumEffectsCallbackW; pvRef: Pointer; dwEffType: DWORD): HResult; stdcall;
  2041.     function GetEffectInfo(var pdei: TDIEffectInfoW; const rguid: TGUID): HResult; stdcall;
  2042.     function GetForceFeedbackState(out pdwOut: DWORD): HResult; stdcall;
  2043.     function SendForceFeedbackCommand(dwFlags: DWORD): HResult; stdcall;
  2044.     function EnumCreatedEffectObjects(lpCallback: TDIEnumCreatedEffectObjectsCallback; pvRef: Pointer; fl: DWORD): HResult; stdcall;
  2045.     function Escape(var pesc: TDIEffEscape): HResult; stdcall;
  2046.     function Poll: HResult; stdcall;
  2047.     function SendDeviceData(cbObjectData: DWORD; rgdod: PDIDeviceObjectData; var pdwInOut: DWORD; fl: DWORD): HResult; stdcall;
  2048.   end;
  2049.  
  2050.   {$EXTERNALSYM IDirectInputDevice2}
  2051.   IDirectInputDevice2 = IDirectInputDevice2A;
  2052. type
  2053.   IID_IDirectInputDevice2 = IDirectInputDevice2;
  2054.   {$EXTERNALSYM IID_IDirectInputDevice2}
  2055.  
  2056. {$ENDIF} (* DIRECTINPUT_VERSION >= 0x0500 *)
  2057.  
  2058. {$IFDEF DIRECTINPUT_VERSION_7} (* #if(DIRECTINPUT_VERSION >= 0x0700) *)
  2059. const
  2060.   DIFEF_DEFAULT               = $00000000;
  2061.   {$EXTERNALSYM DIFEF_DEFAULT}
  2062.   DIFEF_INCLUDENONSTANDARD    = $00000001;
  2063.   {$EXTERNALSYM DIFEF_INCLUDENONSTANDARD}
  2064.   DIFEF_MODIFYIFNEEDED        = $00000010;
  2065.   {$EXTERNALSYM DIFEF_MODIFYIFNEEDED}
  2066.  
  2067. type
  2068.   {$EXTERNALSYM IDirectInputDevice7A}
  2069.   IDirectInputDevice7A = interface(IDirectInputDevice2A)
  2070.     [SID_IDirectInputDevice7A]
  2071.     (*** IDirectInputDevice7A methods ***)
  2072.     function EnumEffectsInFile(lpszFileName: PAnsiChar; pec: TDIEnumEffectsInFileCallback; pvRef: Pointer; dwFlags: DWORD): HResult; stdcall;
  2073.     function WriteEffectToFile(lpszFileName: PAnsiChar; dwEntries: DWORD; rgDiFileEft: PDIFileEffect; dwFlags: DWORD): HResult; stdcall;
  2074.   end;
  2075.  
  2076.   {$EXTERNALSYM IDirectInputDevice7W}
  2077.   IDirectInputDevice7W = interface(IDirectInputDevice2W)
  2078.     [SID_IDirectInputDevice7W]
  2079.     (*** IDirectInputDevice7W methods ***)
  2080.     function EnumEffectsInFile(lpszFileName: PWideChar; pec: TDIEnumEffectsInFileCallback; pvRef: Pointer; dwFlags: DWORD): HResult; stdcall;
  2081.     function WriteEffectToFile(lpszFileName: PWideChar; dwEntries: DWORD; rgDiFileEft: PDIFileEffect; dwFlags: DWORD): HResult; stdcall;
  2082.   end;
  2083.  
  2084.   {$EXTERNALSYM IDirectInputDevice7}
  2085.   IDirectInputDevice7 = IDirectInputDevice7A;
  2086. type
  2087.   IID_IDirectInputDevice7 = IDirectInputDevice7;
  2088.   {$EXTERNALSYM IID_IDirectInputDevice7}
  2089.  
  2090. {$ENDIF} (* DIRECTINPUT_VERSION >= 0x0700 *)
  2091.  
  2092. {$IFDEF DIRECTINPUT_VERSION_8} (* #if(DIRECTINPUT_VERSION >= 0x0800) *)
  2093. type
  2094.   {$EXTERNALSYM IDirectInputDevice8A}
  2095.   IDirectInputDevice8A = interface(IDirectInputDevice7A)
  2096.     [SID_IDirectInputDevice8A]
  2097.     (*** IDirectInputDevice8A methods ***)
  2098.     function BuildActionMap(lpdiaf: TDIActionFormatA; lpszUserName: PAnsiChar; dwFlags: DWORD): HResult; stdcall;
  2099.     function SetActionMap(var lpdiActionFormat: TDIActionFormatA; lptszUserName: PAnsiChar; dwFlags: DWORD): HResult; stdcall;
  2100.     function GetImageInfo(var lpdiDevImageInfoHeader: TDIDeviceImageInfoHeaderA): HResult; stdcall;
  2101.   end;
  2102.  
  2103.   {$EXTERNALSYM IDirectInputDevice8W}
  2104.   IDirectInputDevice8W = interface(IDirectInputDevice7W)
  2105.     [SID_IDirectInputDevice8W]
  2106.     (*** IDirectInputDevice8W methods ***)
  2107.     function BuildActionMap(lpdiaf: TDIActionFormatW; lpszUserName: PWideChar; dwFlags: DWORD): HResult; stdcall;
  2108.     function SetActionMap(var lpdiActionFormat: TDIActionFormatW; lptszUserName: PWideChar; dwFlags: DWORD): HResult; stdcall;
  2109.     function GetImageInfo(var lpdiDevImageInfoHeader: TDIDeviceImageInfoHeaderW): HResult; stdcall;
  2110.   end;
  2111.  
  2112.   {$EXTERNALSYM IDirectInputDevice8}
  2113.   IDirectInputDevice8 = IDirectInputDevice8A;
  2114. type
  2115.   IID_IDirectInputDevice8 = IDirectInputDevice8;
  2116.   {$EXTERNALSYM IID_IDirectInputDevice8}
  2117.  
  2118. {$ENDIF} (* DIRECTINPUT_VERSION >= 0x0800 *)
  2119.  
  2120. (****************************************************************************
  2121.  *
  2122.  *      Mouse
  2123.  *
  2124.  ****************************************************************************)
  2125.  
  2126. type
  2127.   PDIMouseState = ^TDIMouseState;
  2128.   _DIMOUSESTATE = packed record
  2129.     lX: Longint;
  2130.     lY: Longint;
  2131.     lZ: Longint;
  2132.     rgbButtons: array[0..3] of Byte;
  2133.   end;
  2134.   {$EXTERNALSYM _DIMOUSESTATE}
  2135.   DIMOUSESTATE = _DIMOUSESTATE;
  2136.   {$EXTERNALSYM DIMOUSESTATE}
  2137.   TDIMouseState = _DIMOUSESTATE;
  2138.  
  2139. {$IFDEF DIRECTINPUT_VERSION_7} (* #if(DIRECTINPUT_VERSION >= 0x0700) *)
  2140.   PDIMouseState2 = ^TDIMouseState2;
  2141.   _DIMOUSESTATE2 = packed record
  2142.     lX: Longint;
  2143.     lY: Longint;
  2144.     lZ: Longint;
  2145.     rgbButtons: array[0..7] of Byte;
  2146.   end;
  2147.   {$EXTERNALSYM _DIMOUSESTATE2}
  2148.   DIMOUSESTATE2 = _DIMOUSESTATE2;
  2149.   {$EXTERNALSYM DIMOUSESTATE2}
  2150.   TDIMouseState2 = _DIMOUSESTATE2;
  2151.  
  2152. {$ENDIF} (* DIRECTINPUT_VERSION >= 0x0700 *)
  2153.  
  2154. const
  2155.   DIMOFS_X        = 0; // FIELD_OFFSET(DIMOUSESTATE, lX)
  2156.   {$EXTERNALSYM DIMOFS_X}
  2157.   DIMOFS_Y        = 4; // FIELD_OFFSET(DIMOUSESTATE, lY)
  2158.   {$EXTERNALSYM DIMOFS_Y}
  2159.   DIMOFS_Z        = 8; // FIELD_OFFSET(DIMOUSESTATE, lZ)
  2160.   {$EXTERNALSYM DIMOFS_Z}
  2161.   DIMOFS_BUTTON0  = 12;                 // (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 0)
  2162.   {$EXTERNALSYM DIMOFS_BUTTON0}
  2163.   DIMOFS_BUTTON1  = DIMOFS_BUTTON0 + 1; // (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 1)
  2164.   {$EXTERNALSYM DIMOFS_BUTTON1}
  2165.   DIMOFS_BUTTON2  = DIMOFS_BUTTON0 + 2; // (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 2)
  2166.   {$EXTERNALSYM DIMOFS_BUTTON2}
  2167.   DIMOFS_BUTTON3  = DIMOFS_BUTTON0 + 3; // (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 3)
  2168.   {$EXTERNALSYM DIMOFS_BUTTON3}
  2169. {$IFDEF DIRECTINPUT_VERSION_7} (* #if(DIRECTINPUT_VERSION >= 0x0700) *)
  2170.   DIMOFS_BUTTON4  = DIMOFS_BUTTON0 + 4; // (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 4)
  2171.   {$EXTERNALSYM DIMOFS_BUTTON4}
  2172.   DIMOFS_BUTTON5  = DIMOFS_BUTTON0 + 5; // (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 5)
  2173.   {$EXTERNALSYM DIMOFS_BUTTON5}
  2174.   DIMOFS_BUTTON6  = DIMOFS_BUTTON0 + 6; // (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 6)
  2175.   {$EXTERNALSYM DIMOFS_BUTTON6}
  2176.   DIMOFS_BUTTON7  = DIMOFS_BUTTON0 + 7; // (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 7)
  2177.   {$EXTERNALSYM DIMOFS_BUTTON7}
  2178. {$ENDIF} (* DIRECTINPUT_VERSION >= 0x0700 *)
  2179.  
  2180. (****************************************************************************
  2181.  *
  2182.  *      Keyboard
  2183.  *
  2184.  ****************************************************************************)
  2185.  
  2186. (****************************************************************************
  2187.  *
  2188.  *      DirectInput keyboard scan codes
  2189.  *
  2190.  ****************************************************************************)
  2191. const
  2192.   DIK_ESCAPE          = $01;
  2193.   {$EXTERNALSYM DIK_ESCAPE}
  2194.   DIK_1               = $02;
  2195.   {$EXTERNALSYM DIK_1}
  2196.   DIK_2               = $03;
  2197.   {$EXTERNALSYM DIK_2}
  2198.   DIK_3               = $04;
  2199.   {$EXTERNALSYM DIK_3}
  2200.   DIK_4               = $05;
  2201.   {$EXTERNALSYM DIK_4}
  2202.   DIK_5               = $06;
  2203.   {$EXTERNALSYM DIK_5}
  2204.   DIK_6               = $07;
  2205.   {$EXTERNALSYM DIK_6}
  2206.   DIK_7               = $08;
  2207.   {$EXTERNALSYM DIK_7}
  2208.   DIK_8               = $09;
  2209.   {$EXTERNALSYM DIK_8}
  2210.   DIK_9               = $0A;
  2211.   {$EXTERNALSYM DIK_9}
  2212.   DIK_0               = $0B;
  2213.   {$EXTERNALSYM DIK_0}
  2214.   DIK_MINUS           = $0C;    (* - on main keyboard *)
  2215.   {$EXTERNALSYM DIK_MINUS}
  2216.   DIK_EQUALS          = $0D;
  2217.   {$EXTERNALSYM DIK_EQUALS}
  2218.   DIK_BACK            = $0E;    (* backspace *)
  2219.   {$EXTERNALSYM DIK_BACK}
  2220.   DIK_TAB             = $0F;
  2221.   {$EXTERNALSYM DIK_TAB}
  2222.   DIK_Q               = $10;
  2223.   {$EXTERNALSYM DIK_Q}
  2224.   DIK_W               = $11;
  2225.   {$EXTERNALSYM DIK_W}
  2226.   DIK_E               = $12;
  2227.   {$EXTERNALSYM DIK_E}
  2228.   DIK_R               = $13;
  2229.   {$EXTERNALSYM DIK_R}
  2230.   DIK_T               = $14;
  2231.   {$EXTERNALSYM DIK_T}
  2232.   DIK_Y               = $15;
  2233.   {$EXTERNALSYM DIK_Y}
  2234.   DIK_U               = $16;
  2235.   {$EXTERNALSYM DIK_U}
  2236.   DIK_I               = $17;
  2237.   {$EXTERNALSYM DIK_I}
  2238.   DIK_O               = $18;
  2239.   {$EXTERNALSYM DIK_O}
  2240.   DIK_P               = $19;
  2241.   {$EXTERNALSYM DIK_P}
  2242.   DIK_LBRACKET        = $1A;
  2243.   {$EXTERNALSYM DIK_LBRACKET}
  2244.   DIK_RBRACKET        = $1B;
  2245.   {$EXTERNALSYM DIK_RBRACKET}
  2246.   DIK_RETURN          = $1C;    (* Enter on main keyboard *)
  2247.   {$EXTERNALSYM DIK_RETURN}
  2248.   DIK_LCONTROL        = $1D;
  2249.   {$EXTERNALSYM DIK_LCONTROL}
  2250.   DIK_A               = $1E;
  2251.   {$EXTERNALSYM DIK_A}
  2252.   DIK_S               = $1F;
  2253.   {$EXTERNALSYM DIK_S}
  2254.   DIK_D               = $20;
  2255.   {$EXTERNALSYM DIK_D}
  2256.   DIK_F               = $21;
  2257.   {$EXTERNALSYM DIK_F}
  2258.   DIK_G               = $22;
  2259.   {$EXTERNALSYM DIK_G}
  2260.   DIK_H               = $23;
  2261.   {$EXTERNALSYM DIK_H}
  2262.   DIK_J               = $24;
  2263.   {$EXTERNALSYM DIK_J}
  2264.   DIK_K               = $25;
  2265.   {$EXTERNALSYM DIK_K}
  2266.   DIK_L               = $26;
  2267.   {$EXTERNALSYM DIK_L}
  2268.   DIK_SEMICOLON       = $27;
  2269.   {$EXTERNALSYM DIK_SEMICOLON}
  2270.   DIK_APOSTROPHE      = $28;
  2271.   {$EXTERNALSYM DIK_APOSTROPHE}
  2272.   DIK_GRAVE           = $29;    (* accent grave *)
  2273.   {$EXTERNALSYM DIK_GRAVE}
  2274.   DIK_LSHIFT          = $2A;
  2275.   {$EXTERNALSYM DIK_LSHIFT}
  2276.   DIK_BACKSLASH       = $2B;
  2277.   {$EXTERNALSYM DIK_BACKSLASH}
  2278.   DIK_Z               = $2C;
  2279.   {$EXTERNALSYM DIK_Z}
  2280.   DIK_X               = $2D;
  2281.   {$EXTERNALSYM DIK_X}
  2282.   DIK_C               = $2E;
  2283.   {$EXTERNALSYM DIK_C}
  2284.   DIK_V               = $2F;
  2285.   {$EXTERNALSYM DIK_V}
  2286.   DIK_B               = $30;
  2287.   {$EXTERNALSYM DIK_B}
  2288.   DIK_N               = $31;
  2289.   {$EXTERNALSYM DIK_N}
  2290.   DIK_M               = $32;
  2291.   {$EXTERNALSYM DIK_M}
  2292.   DIK_COMMA           = $33;
  2293.   {$EXTERNALSYM DIK_COMMA}
  2294.   DIK_PERIOD          = $34;    (* . on main keyboard *)
  2295.   {$EXTERNALSYM DIK_PERIOD}
  2296.   DIK_SLASH           = $35;    (* / on main keyboard *)
  2297.   {$EXTERNALSYM DIK_SLASH}
  2298.   DIK_RSHIFT          = $36;
  2299.   {$EXTERNALSYM DIK_RSHIFT}
  2300.   DIK_MULTIPLY        = $37;    (* * on numeric keypad *)
  2301.   {$EXTERNALSYM DIK_MULTIPLY}
  2302.   DIK_LMENU           = $38;    (* left Alt *)
  2303.   {$EXTERNALSYM DIK_LMENU}
  2304.   DIK_SPACE           = $39;
  2305.   {$EXTERNALSYM DIK_SPACE}
  2306.   DIK_CAPITAL         = $3A;
  2307.   {$EXTERNALSYM DIK_CAPITAL}
  2308.   DIK_F1              = $3B;
  2309.   {$EXTERNALSYM DIK_F1}
  2310.   DIK_F2              = $3C;
  2311.   {$EXTERNALSYM DIK_F2}
  2312.   DIK_F3              = $3D;
  2313.   {$EXTERNALSYM DIK_F3}
  2314.   DIK_F4              = $3E;
  2315.   {$EXTERNALSYM DIK_F4}
  2316.   DIK_F5              = $3F;
  2317.   {$EXTERNALSYM DIK_F5}
  2318.   DIK_F6              = $40;
  2319.   {$EXTERNALSYM DIK_F6}
  2320.   DIK_F7              = $41;
  2321.   {$EXTERNALSYM DIK_F7}
  2322.   DIK_F8              = $42;
  2323.   {$EXTERNALSYM DIK_F8}
  2324.   DIK_F9              = $43;
  2325.   {$EXTERNALSYM DIK_F9}
  2326.   DIK_F10             = $44;
  2327.   {$EXTERNALSYM DIK_F10}
  2328.   DIK_NUMLOCK         = $45;
  2329.   {$EXTERNALSYM DIK_NUMLOCK}
  2330.   DIK_SCROLL          = $46;    (* Scroll Lock *)
  2331.   {$EXTERNALSYM DIK_SCROLL}
  2332.   DIK_NUMPAD7         = $47;
  2333.   {$EXTERNALSYM DIK_NUMPAD7}
  2334.   DIK_NUMPAD8         = $48;
  2335.   {$EXTERNALSYM DIK_NUMPAD8}
  2336.   DIK_NUMPAD9         = $49;
  2337.   {$EXTERNALSYM DIK_NUMPAD9}
  2338.   DIK_SUBTRACT        = $4A;    (* - on numeric keypad *)
  2339.   {$EXTERNALSYM DIK_SUBTRACT}
  2340.   DIK_NUMPAD4         = $4B;
  2341.   {$EXTERNALSYM DIK_NUMPAD4}
  2342.   DIK_NUMPAD5         = $4C;
  2343.   {$EXTERNALSYM DIK_NUMPAD5}
  2344.   DIK_NUMPAD6         = $4D;
  2345.   {$EXTERNALSYM DIK_NUMPAD6}
  2346.   DIK_ADD             = $4E;    (* + on numeric keypad *)
  2347.   {$EXTERNALSYM DIK_ADD}
  2348.   DIK_NUMPAD1         = $4F;
  2349.   {$EXTERNALSYM DIK_NUMPAD1}
  2350.   DIK_NUMPAD2         = $50;
  2351.   {$EXTERNALSYM DIK_NUMPAD2}
  2352.   DIK_NUMPAD3         = $51;
  2353.   {$EXTERNALSYM DIK_NUMPAD3}
  2354.   DIK_NUMPAD0         = $52;
  2355.   {$EXTERNALSYM DIK_NUMPAD0}
  2356.   DIK_DECIMAL         = $53;    (* . on numeric keypad *)
  2357.   {$EXTERNALSYM DIK_DECIMAL}
  2358.   DIK_OEM_102         = $56;    (* <> or \| on RT 102-key keyboard (Non-U.S.) *)
  2359.   {$EXTERNALSYM DIK_OEM_102}
  2360.   DIK_F11             = $57;
  2361.   {$EXTERNALSYM DIK_F11}
  2362.   DIK_F12             = $58;
  2363.   {$EXTERNALSYM DIK_F12}
  2364.   DIK_F13             = $64;    (*                     (NEC PC98) *)
  2365.   {$EXTERNALSYM DIK_F13}
  2366.   DIK_F14             = $65;    (*                     (NEC PC98) *)
  2367.   {$EXTERNALSYM DIK_F14}
  2368.   DIK_F15             = $66;    (*                     (NEC PC98) *)
  2369.   {$EXTERNALSYM DIK_F15}
  2370.   DIK_KANA            = $70;    (* (Japanese keyboard)            *)
  2371.   {$EXTERNALSYM DIK_KANA}
  2372.   DIK_ABNT_C1         = $73;    (* /? on Brazilian keyboard *)
  2373.   {$EXTERNALSYM DIK_ABNT_C1}
  2374.   DIK_CONVERT         = $79;    (* (Japanese keyboard)            *)
  2375.   {$EXTERNALSYM DIK_CONVERT}
  2376.   DIK_NOCONVERT       = $7B;    (* (Japanese keyboard)            *)
  2377.   {$EXTERNALSYM DIK_NOCONVERT}
  2378.   DIK_YEN             = $7D;    (* (Japanese keyboard)            *)
  2379.   {$EXTERNALSYM DIK_YEN}
  2380.   DIK_ABNT_C2         = $7E;    (* Numpad . on Brazilian keyboard *)
  2381.   {$EXTERNALSYM DIK_ABNT_C2}
  2382.   DIK_NUMPADEQUALS    = $8D;    (* = on numeric keypad (NEC PC98) *)
  2383.   {$EXTERNALSYM DIK_NUMPADEQUALS}
  2384.   DIK_PREVTRACK       = $90;    (* Previous Track (DIK_CIRCUMFLEX on Japanese keyboard) *)
  2385.   {$EXTERNALSYM DIK_PREVTRACK}
  2386.   DIK_AT              = $91;    (*                     (NEC PC98) *)
  2387.   {$EXTERNALSYM DIK_AT}
  2388.   DIK_COLON           = $92;    (*                     (NEC PC98) *)
  2389.   {$EXTERNALSYM DIK_COLON}
  2390.   DIK_UNDERLINE       = $93;    (*                     (NEC PC98) *)
  2391.   {$EXTERNALSYM DIK_UNDERLINE}
  2392.   DIK_KANJI           = $94;    (* (Japanese keyboard)            *)
  2393.   {$EXTERNALSYM DIK_KANJI}
  2394.   DIK_STOP            = $95;    (*                     (NEC PC98) *)
  2395.   {$EXTERNALSYM DIK_STOP}
  2396.   DIK_AX              = $96;    (*                     (Japan AX) *)
  2397.   {$EXTERNALSYM DIK_AX}
  2398.   DIK_UNLABELED       = $97;    (*                        (J3100) *)
  2399.   {$EXTERNALSYM DIK_UNLABELED}
  2400.   DIK_NEXTTRACK       = $99;    (* Next Track *)
  2401.   {$EXTERNALSYM DIK_NEXTTRACK}
  2402.   DIK_NUMPADENTER     = $9C;    (* Enter on numeric keypad *)
  2403.   {$EXTERNALSYM DIK_NUMPADENTER}
  2404.   DIK_RCONTROL        = $9D;
  2405.   {$EXTERNALSYM DIK_RCONTROL}
  2406.   DIK_MUTE            = $A0;    (* Mute *)
  2407.   {$EXTERNALSYM DIK_MUTE}
  2408.   DIK_CALCULATOR      = $A1;    (* Calculator *)
  2409.   {$EXTERNALSYM DIK_CALCULATOR}
  2410.   DIK_PLAYPAUSE       = $A2;    (* Play / Pause *)
  2411.   {$EXTERNALSYM DIK_PLAYPAUSE}
  2412.   DIK_MEDIASTOP       = $A4;    (* Media Stop *)
  2413.   {$EXTERNALSYM DIK_MEDIASTOP}
  2414.   DIK_VOLUMEDOWN      = $AE;    (* Volume - *)
  2415.   {$EXTERNALSYM DIK_VOLUMEDOWN}
  2416.   DIK_VOLUMEUP        = $B0;    (* Volume + *)
  2417.   {$EXTERNALSYM DIK_VOLUMEUP}
  2418.   DIK_WEBHOME         = $B2;    (* Web home *)
  2419.   {$EXTERNALSYM DIK_WEBHOME}
  2420.   DIK_NUMPADCOMMA     = $B3;    (* , on numeric keypad (NEC PC98) *)
  2421.   {$EXTERNALSYM DIK_NUMPADCOMMA}
  2422.   DIK_DIVIDE          = $B5;    (* / on numeric keypad *)
  2423.   {$EXTERNALSYM DIK_DIVIDE}
  2424.   DIK_SYSRQ           = $B7;
  2425.   {$EXTERNALSYM DIK_SYSRQ}
  2426.   DIK_RMENU           = $B8;    (* right Alt *)
  2427.   {$EXTERNALSYM DIK_RMENU}
  2428.   DIK_PAUSE           = $C5;    (* Pause *)
  2429.   {$EXTERNALSYM DIK_PAUSE}
  2430.   DIK_HOME            = $C7;    (* Home on arrow keypad *)
  2431.   {$EXTERNALSYM DIK_HOME}
  2432.   DIK_UP              = $C8;    (* UpArrow on arrow keypad *)
  2433.   {$EXTERNALSYM DIK_UP}
  2434.   DIK_PRIOR           = $C9;    (* PgUp on arrow keypad *)
  2435.   {$EXTERNALSYM DIK_PRIOR}
  2436.   DIK_LEFT            = $CB;    (* LeftArrow on arrow keypad *)
  2437.   {$EXTERNALSYM DIK_LEFT}
  2438.   DIK_RIGHT           = $CD;    (* RightArrow on arrow keypad *)
  2439.   {$EXTERNALSYM DIK_RIGHT}
  2440.   DIK_END             = $CF;    (* End on arrow keypad *)
  2441.   {$EXTERNALSYM DIK_END}
  2442.   DIK_DOWN            = $D0;    (* DownArrow on arrow keypad *)
  2443.   {$EXTERNALSYM DIK_DOWN}
  2444.   DIK_NEXT            = $D1;    (* PgDn on arrow keypad *)
  2445.   {$EXTERNALSYM DIK_NEXT}
  2446.   DIK_INSERT          = $D2;    (* Insert on arrow keypad *)
  2447.   {$EXTERNALSYM DIK_INSERT}
  2448.   DIK_DELETE          = $D3;    (* Delete on arrow keypad *)
  2449.   {$EXTERNALSYM DIK_DELETE}
  2450.   DIK_LWIN            = $DB;    (* Left Windows key *)
  2451.   {$EXTERNALSYM DIK_LWIN}
  2452.   DIK_RWIN            = $DC;    (* Right Windows key *)
  2453.   {$EXTERNALSYM DIK_RWIN}
  2454.   DIK_APPS            = $DD;    (* AppMenu key *)
  2455.   {$EXTERNALSYM DIK_APPS}
  2456.   DIK_POWER           = $DE;    (* System Power *)
  2457.   {$EXTERNALSYM DIK_POWER}
  2458.   DIK_SLEEP           = $DF;    (* System Sleep *)
  2459.   {$EXTERNALSYM DIK_SLEEP}
  2460.   DIK_WAKE            = $E3;    (* System Wake *)
  2461.   {$EXTERNALSYM DIK_WAKE}
  2462.   DIK_WEBSEARCH       = $E5;    (* Web Search *)
  2463.   {$EXTERNALSYM DIK_WEBSEARCH}
  2464.   DIK_WEBFAVORITES    = $E6;    (* Web Favorites *)
  2465.   {$EXTERNALSYM DIK_WEBFAVORITES}
  2466.   DIK_WEBREFRESH      = $E7;    (* Web Refresh *)
  2467.   {$EXTERNALSYM DIK_WEBREFRESH}
  2468.   DIK_WEBSTOP         = $E8;    (* Web Stop *)
  2469.   {$EXTERNALSYM DIK_WEBSTOP}
  2470.   DIK_WEBFORWARD      = $E9;    (* Web Forward *)
  2471.   {$EXTERNALSYM DIK_WEBFORWARD}
  2472.   DIK_WEBBACK         = $EA;    (* Web Back *)
  2473.   {$EXTERNALSYM DIK_WEBBACK}
  2474.   DIK_MYCOMPUTER      = $EB;    (* My Computer *)
  2475.   {$EXTERNALSYM DIK_MYCOMPUTER}
  2476.   DIK_MAIL            = $EC;    (* Mail *)
  2477.   {$EXTERNALSYM DIK_MAIL}
  2478.   DIK_MEDIASELECT     = $ED;    (* Media Select *)
  2479.   {$EXTERNALSYM DIK_MEDIASELECT}
  2480.  
  2481. (*
  2482.  *  Alternate names for keys, to facilitate transition from DOS.
  2483.  *)
  2484.   DIK_BACKSPACE       = DIK_BACK;            (* backspace *)
  2485.   {$EXTERNALSYM DIK_BACKSPACE}
  2486.   DIK_NUMPADSTAR      = DIK_MULTIPLY;        (* * on numeric keypad *)
  2487.   {$EXTERNALSYM DIK_NUMPADSTAR}
  2488.   DIK_LALT            = DIK_LMENU;           (* left Alt *)
  2489.   {$EXTERNALSYM DIK_LALT}
  2490.   DIK_CAPSLOCK        = DIK_CAPITAL;         (* CapsLock *)
  2491.   {$EXTERNALSYM DIK_CAPSLOCK}
  2492.   DIK_NUMPADMINUS     = DIK_SUBTRACT;        (* - on numeric keypad *)
  2493.   {$EXTERNALSYM DIK_NUMPADMINUS}
  2494.   DIK_NUMPADPLUS      = DIK_ADD;             (* + on numeric keypad *)
  2495.   {$EXTERNALSYM DIK_NUMPADPLUS}
  2496.   DIK_NUMPADPERIOD    = DIK_DECIMAL;         (* . on numeric keypad *)
  2497.   {$EXTERNALSYM DIK_NUMPADPERIOD}
  2498.   DIK_NUMPADSLASH     = DIK_DIVIDE;          (* / on numeric keypad *)
  2499.   {$EXTERNALSYM DIK_NUMPADSLASH}
  2500.   DIK_RALT            = DIK_RMENU;           (* right Alt *)
  2501.   {$EXTERNALSYM DIK_RALT}
  2502.   DIK_UPARROW         = DIK_UP;              (* UpArrow on arrow keypad *)
  2503.   {$EXTERNALSYM DIK_UPARROW}
  2504.   DIK_PGUP            = DIK_PRIOR;           (* PgUp on arrow keypad *)
  2505.   {$EXTERNALSYM DIK_PGUP}
  2506.   DIK_LEFTARROW       = DIK_LEFT;            (* LeftArrow on arrow keypad *)
  2507.   {$EXTERNALSYM DIK_LEFTARROW}
  2508.   DIK_RIGHTARROW      = DIK_RIGHT;           (* RightArrow on arrow keypad *)
  2509.   {$EXTERNALSYM DIK_RIGHTARROW}
  2510.   DIK_DOWNARROW       = DIK_DOWN;            (* DownArrow on arrow keypad *)
  2511.   {$EXTERNALSYM DIK_DOWNARROW}
  2512.   DIK_PGDN            = DIK_NEXT;            (* PgDn on arrow keypad *)
  2513.   {$EXTERNALSYM DIK_PGDN}
  2514.  
  2515. (*
  2516.  *  Alternate names for keys originally not used on US keyboards.
  2517.  *)
  2518.   DIK_CIRCUMFLEX      = DIK_PREVTRACK;       (* Japanese keyboard *)
  2519.   {$EXTERNALSYM DIK_CIRCUMFLEX}
  2520.  
  2521. (****************************************************************************
  2522.  *
  2523.  *      Joystick
  2524.  *
  2525.  ****************************************************************************)
  2526.  
  2527. type
  2528.   PDIJoyState = ^TDIJoyState;
  2529.   DIJOYSTATE = packed record
  2530.     lX: Longint;                        (* x-axis position              *)
  2531.     lY: Longint;                        (* y-axis position              *)
  2532.     lZ: Longint;                        (* z-axis position              *)
  2533.     lRx: Longint;                       (* x-axis rotation              *)
  2534.     lRy: Longint;                       (* y-axis rotation              *)
  2535.     lRz: Longint;                       (* z-axis rotation              *)
  2536.     rglSlider: array[0..1] of Longint;  (* extra axes positions         *)
  2537.     rgdwPOV: array[0..3] of DWORD;      (* POV directions               *)
  2538.     rgbButtons: array[0..31] of Byte;   (* 32 buttons                   *)
  2539.   end;
  2540.   {$EXTERNALSYM DIJOYSTATE}
  2541.   TDIJoyState = DIJOYSTATE;
  2542.  
  2543.   PDIJoyState2 = ^TDIJoyState2;
  2544.   DIJOYSTATE2 = packed record
  2545.     lX: Longint;                        (* x-axis position              *)
  2546.     lY: Longint;                        (* y-axis position              *)
  2547.     lZ: Longint;                        (* z-axis position              *)
  2548.     lRx: Longint;                       (* x-axis rotation              *)
  2549.     lRy: Longint;                       (* y-axis rotation              *)
  2550.     lRz: Longint;                       (* z-axis rotation              *)
  2551.     rglSlider: array[0..1] of Longint;  (* extra axes positions         *)
  2552.     rgdwPOV: array[0..3] of DWORD;      (* POV directions               *)
  2553.     rgbButtons: array[0..127] of Byte;  (* 128 buttons                  *)
  2554.     lVX: Longint;                       (* x-axis velocity              *)
  2555.     lVY: Longint;                       (* y-axis velocity              *)
  2556.     lVZ: Longint;                       (* z-axis velocity              *)
  2557.     lVRx: Longint;                      (* x-axis angular velocity      *)
  2558.     lVRy: Longint;                      (* y-axis angular velocity      *)
  2559.     lVRz: Longint;                      (* z-axis angular velocity      *)
  2560.     rglVSlider: array[0..1] of Longint; (* extra axes velocities        *)
  2561.     lAX: Longint;                       (* x-axis acceleration          *)
  2562.     lAY: Longint;                       (* y-axis acceleration          *)
  2563.     lAZ: Longint;                       (* z-axis acceleration          *)
  2564.     lARx: Longint;                      (* x-axis angular acceleration  *)
  2565.     lARy: Longint;                      (* y-axis angular acceleration  *)
  2566.     lARz: Longint;                      (* z-axis angular acceleration  *)
  2567.     rglASlider: array[0..1] of Longint; (* extra axes accelerations     *)
  2568.     lFX: Longint;                       (* x-axis force                 *)
  2569.     lFY: Longint;                       (* y-axis force                 *)
  2570.     lFZ: Longint;                       (* z-axis force                 *)
  2571.     lFRx: Longint;                      (* x-axis torque                *)
  2572.     lFRy: Longint;                      (* y-axis torque                *)
  2573.     lFRz: Longint;                      (* z-axis torque                *)
  2574.     rglFSlider: array[0..1] of Longint; (* extra axes forces            *)
  2575.   end;
  2576.   {$EXTERNALSYM DIJOYSTATE2}
  2577.   TDIJoyState2 = DIJOYSTATE2;
  2578.  
  2579. const
  2580.   DIJOFS_X            = 0;  // FIELD_OFFSET(DIJOYSTATE, lX)
  2581.   {$EXTERNALSYM DIJOFS_X}
  2582.   DIJOFS_Y            = 4;  // FIELD_OFFSET(DIJOYSTATE, lY)
  2583.   {$EXTERNALSYM DIJOFS_Y}
  2584.   DIJOFS_Z            = 8;  // FIELD_OFFSET(DIJOYSTATE, lZ)
  2585.   {$EXTERNALSYM DIJOFS_Z}
  2586.   DIJOFS_RX           = 12; // FIELD_OFFSET(DIJOYSTATE, lRx)
  2587.   {$EXTERNALSYM DIJOFS_RX}
  2588.   DIJOFS_RY           = 16; // FIELD_OFFSET(DIJOYSTATE, lRy)
  2589.   {$EXTERNALSYM DIJOFS_RY}
  2590.   DIJOFS_RZ           = 20; // FIELD_OFFSET(DIJOYSTATE, lRz)
  2591.   {$EXTERNALSYM DIJOFS_RZ}
  2592.  
  2593. //  #define DIJOFS_SLIDER(n)   (FIELD_OFFSET(DIJOYSTATE, rglSlider) + \
  2594. //                              (n) * sizeof(LONG))
  2595. function DIJOFS_SLIDER(n: Cardinal): Cardinal;
  2596. {$EXTERNALSYM DIJOFS_SLIDER}
  2597.  
  2598. // #define DIJOFS_POV(n)      (FIELD_OFFSET(DIJOYSTATE, rgdwPOV) + \
  2599. //                              (n) * sizeof(DWORD))
  2600. function DIJOFS_POV(n: Cardinal): Cardinal;
  2601. {$EXTERNALSYM DIJOFS_POV}
  2602.  
  2603. // #define DIJOFS_BUTTON(n)   (FIELD_OFFSET(DIJOYSTATE, rgbButtons) + (n))
  2604. function DIJOFS_BUTTON(n: Cardinal): Cardinal;
  2605. {$EXTERNALSYM DIJOFS_BUTTON}
  2606.  
  2607. const
  2608.   DIJOFS_BUTTON_      = 48; // Helper const
  2609.  
  2610.   DIJOFS_BUTTON0      = DIJOFS_BUTTON_ +  0; // DIJOFS_BUTTON(0)
  2611.   {$EXTERNALSYM DIJOFS_BUTTON0}
  2612.   DIJOFS_BUTTON1      = DIJOFS_BUTTON_ +  1; // DIJOFS_BUTTON(1)
  2613.   {$EXTERNALSYM DIJOFS_BUTTON1}
  2614.   DIJOFS_BUTTON2      = DIJOFS_BUTTON_ +  2; // DIJOFS_BUTTON(2)
  2615.   {$EXTERNALSYM DIJOFS_BUTTON2}
  2616.   DIJOFS_BUTTON3      = DIJOFS_BUTTON_ +  3; // DIJOFS_BUTTON(3)
  2617.   {$EXTERNALSYM DIJOFS_BUTTON3}
  2618.   DIJOFS_BUTTON4      = DIJOFS_BUTTON_ +  4; // DIJOFS_BUTTON(4)
  2619.   {$EXTERNALSYM DIJOFS_BUTTON4}
  2620.   DIJOFS_BUTTON5      = DIJOFS_BUTTON_ +  5; // DIJOFS_BUTTON(5)
  2621.   {$EXTERNALSYM DIJOFS_BUTTON5}
  2622.   DIJOFS_BUTTON6      = DIJOFS_BUTTON_ +  6; // DIJOFS_BUTTON(6)
  2623.   {$EXTERNALSYM DIJOFS_BUTTON6}
  2624.   DIJOFS_BUTTON7      = DIJOFS_BUTTON_ +  7; // DIJOFS_BUTTON(7)
  2625.   {$EXTERNALSYM DIJOFS_BUTTON7}
  2626.   DIJOFS_BUTTON8      = DIJOFS_BUTTON_ +  8; // DIJOFS_BUTTON(8)
  2627.   {$EXTERNALSYM DIJOFS_BUTTON8}
  2628.   DIJOFS_BUTTON9      = DIJOFS_BUTTON_ +  9; // DIJOFS_BUTTON(9)
  2629.   {$EXTERNALSYM DIJOFS_BUTTON9}
  2630.   DIJOFS_BUTTON10     = DIJOFS_BUTTON_ + 10; // DIJOFS_BUTTON(10)
  2631.   {$EXTERNALSYM DIJOFS_BUTTON10}
  2632.   DIJOFS_BUTTON11     = DIJOFS_BUTTON_ + 11; // DIJOFS_BUTTON(11)
  2633.   {$EXTERNALSYM DIJOFS_BUTTON11}
  2634.   DIJOFS_BUTTON12     = DIJOFS_BUTTON_ + 12; // DIJOFS_BUTTON(12)
  2635.   {$EXTERNALSYM DIJOFS_BUTTON12}
  2636.   DIJOFS_BUTTON13     = DIJOFS_BUTTON_ + 13; // DIJOFS_BUTTON(13)
  2637.   {$EXTERNALSYM DIJOFS_BUTTON13}
  2638.   DIJOFS_BUTTON14     = DIJOFS_BUTTON_ + 14; // DIJOFS_BUTTON(14)
  2639.   {$EXTERNALSYM DIJOFS_BUTTON14}
  2640.   DIJOFS_BUTTON15     = DIJOFS_BUTTON_ + 15; // DIJOFS_BUTTON(15)
  2641.   {$EXTERNALSYM DIJOFS_BUTTON15}
  2642.   DIJOFS_BUTTON16     = DIJOFS_BUTTON_ + 16; // DIJOFS_BUTTON(16)
  2643.   {$EXTERNALSYM DIJOFS_BUTTON16}
  2644.   DIJOFS_BUTTON17     = DIJOFS_BUTTON_ + 17; // DIJOFS_BUTTON(17)
  2645.   {$EXTERNALSYM DIJOFS_BUTTON17}
  2646.   DIJOFS_BUTTON18     = DIJOFS_BUTTON_ + 18; // DIJOFS_BUTTON(18)
  2647.   {$EXTERNALSYM DIJOFS_BUTTON18}
  2648.   DIJOFS_BUTTON19     = DIJOFS_BUTTON_ + 19; // DIJOFS_BUTTON(19)
  2649.   {$EXTERNALSYM DIJOFS_BUTTON19}
  2650.   DIJOFS_BUTTON20     = DIJOFS_BUTTON_ + 20; // DIJOFS_BUTTON(20)
  2651.   {$EXTERNALSYM DIJOFS_BUTTON20}
  2652.   DIJOFS_BUTTON21     = DIJOFS_BUTTON_ + 21; // DIJOFS_BUTTON(21)
  2653.   {$EXTERNALSYM DIJOFS_BUTTON21}
  2654.   DIJOFS_BUTTON22     = DIJOFS_BUTTON_ + 22; // DIJOFS_BUTTON(22)
  2655.   {$EXTERNALSYM DIJOFS_BUTTON22}
  2656.   DIJOFS_BUTTON23     = DIJOFS_BUTTON_ + 23; // DIJOFS_BUTTON(23)
  2657.   {$EXTERNALSYM DIJOFS_BUTTON23}
  2658.   DIJOFS_BUTTON24     = DIJOFS_BUTTON_ + 24; // DIJOFS_BUTTON(24)
  2659.   {$EXTERNALSYM DIJOFS_BUTTON24}
  2660.   DIJOFS_BUTTON25     = DIJOFS_BUTTON_ + 25; // DIJOFS_BUTTON(25)
  2661.   {$EXTERNALSYM DIJOFS_BUTTON25}
  2662.   DIJOFS_BUTTON26     = DIJOFS_BUTTON_ + 26; // DIJOFS_BUTTON(26)
  2663.   {$EXTERNALSYM DIJOFS_BUTTON26}
  2664.   DIJOFS_BUTTON27     = DIJOFS_BUTTON_ + 27; // DIJOFS_BUTTON(27)
  2665.   {$EXTERNALSYM DIJOFS_BUTTON27}
  2666.   DIJOFS_BUTTON28     = DIJOFS_BUTTON_ + 28; // DIJOFS_BUTTON(28)
  2667.   {$EXTERNALSYM DIJOFS_BUTTON28}
  2668.   DIJOFS_BUTTON29     = DIJOFS_BUTTON_ + 29; // DIJOFS_BUTTON(29)
  2669.   {$EXTERNALSYM DIJOFS_BUTTON29}
  2670.   DIJOFS_BUTTON30     = DIJOFS_BUTTON_ + 30; // DIJOFS_BUTTON(30)
  2671.   {$EXTERNALSYM DIJOFS_BUTTON30}
  2672.   DIJOFS_BUTTON31     = DIJOFS_BUTTON_ + 31; // DIJOFS_BUTTON(31)
  2673.   {$EXTERNALSYM DIJOFS_BUTTON31}
  2674.  
  2675. const
  2676.   rgodfDIMouse: array[0..6] of TDIObjectDataFormat = (
  2677.     (pguid: @GUID_XAxis; dwOfs: DIMOFS_X; dwType: DIDFT_AXIS or DIDFT_ANYINSTANCE; dwFlags: 0),
  2678.     (pguid: @GUID_YAxis; dwOfs: DIMOFS_Y; dwType: DIDFT_AXIS or DIDFT_ANYINSTANCE; dwFlags: 0),
  2679.     (pguid: @GUID_ZAxis; dwOfs: DIMOFS_Z; dwType: DIDFT_AXIS or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  2680.     (pguid: nil; dwOfs: DIMOFS_BUTTON0;   dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE; dwFlags: 0),
  2681.     (pguid: nil; dwOfs: DIMOFS_BUTTON1;   dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE; dwFlags: 0),
  2682.     (pguid: nil; dwOfs: DIMOFS_BUTTON2;   dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  2683.     (pguid: nil; dwOfs: DIMOFS_BUTTON3;   dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0)
  2684.   );
  2685.   {$EXTERNALSYM rgodfDIMouse}
  2686.  
  2687.   c_dfDIMouse: TDIDataFormat = (
  2688.     dwSize: Sizeof(c_dfDIMouse);              // $18
  2689.     dwObjSize: Sizeof(TDIObjectDataFormat);   // $10
  2690.     dwFlags: DIDF_RELAXIS;                    // $2
  2691.     dwDataSize: Sizeof(TDIMouseState);        // $10
  2692.     dwNumObjs: High(rgodfDIMouse) + 1;
  2693.     rgodf: @rgodfDIMouse
  2694.   );
  2695.   {$EXTERNALSYM c_dfDIMouse}
  2696.  
  2697.  
  2698. {$IFDEF DIRECTINPUT_VERSION_7} (* #if(DIRECTINPUT_VERSION >= 0x0700) *)
  2699.   rgodfDIMouse2: array[0..10] of TDIObjectDataFormat = (
  2700.     (pguid: @GUID_XAxis; dwOfs: DIMOFS_X; dwType: DIDFT_AXIS or DIDFT_ANYINSTANCE; dwFlags: 0),
  2701.     (pguid: @GUID_YAxis; dwOfs: DIMOFS_Y; dwType: DIDFT_AXIS or DIDFT_ANYINSTANCE; dwFlags: 0),
  2702.     (pguid: @GUID_ZAxis; dwOfs: DIMOFS_Z; dwType: DIDFT_AXIS or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0), // DIDFT_ENUMCOLLECTION(DIDFT_ALIAS) == $80000000
  2703.     (pguid: nil; dwOfs: DIMOFS_BUTTON0;   dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE; dwFlags: 0),
  2704.     (pguid: nil; dwOfs: DIMOFS_BUTTON1;   dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE; dwFlags: 0),
  2705.     (pguid: nil; dwOfs: DIMOFS_BUTTON2;   dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  2706.     (pguid: nil; dwOfs: DIMOFS_BUTTON3;   dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  2707.     (pguid: nil; dwOfs: DIMOFS_BUTTON4;   dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  2708.     (pguid: nil; dwOfs: DIMOFS_BUTTON5;   dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  2709.     (pguid: nil; dwOfs: DIMOFS_BUTTON6;   dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  2710.     (pguid: nil; dwOfs: DIMOFS_BUTTON7;   dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0)
  2711.   );
  2712.   {$EXTERNALSYM rgodfDIMouse2}
  2713.  
  2714.   c_dfDIMouse2: TDIDataFormat = (
  2715.     dwSize     : Sizeof(c_dfDIMouse2);              // $18
  2716.     dwObjSize  : Sizeof(TDIObjectDataFormat);   // $10
  2717.     dwFlags    : DIDF_RELAXIS;                    // $2
  2718.     dwDataSize : Sizeof(TDIMouseState2);        // $10
  2719.     dwNumObjs  : High(rgodfDIMouse2) + 1;
  2720.     rgodf      : @rgodfDIMouse2
  2721.   );
  2722.   {$EXTERNALSYM c_dfDIMouse2}
  2723. {$ENDIF} (* DIRECTINPUT_VERSION >= 0x0700 *)
  2724.  
  2725.  
  2726. const
  2727.   rgodfKeyboard: array[0..255] of TDIObjectDataFormat = (
  2728.     (pguid: @GUID_Key; dwOfs:   0; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (  0 shl 8); dwFlags: 0),
  2729.     (pguid: @GUID_Key; dwOfs:   1; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (  1 shl 8); dwFlags: 0),
  2730.     (pguid: @GUID_Key; dwOfs:   2; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (  2 shl 8); dwFlags: 0),
  2731.     (pguid: @GUID_Key; dwOfs:   3; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (  3 shl 8); dwFlags: 0),
  2732.     (pguid: @GUID_Key; dwOfs:   4; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (  4 shl 8); dwFlags: 0),
  2733.     (pguid: @GUID_Key; dwOfs:   5; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (  5 shl 8); dwFlags: 0),
  2734.     (pguid: @GUID_Key; dwOfs:   6; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (  6 shl 8); dwFlags: 0),
  2735.     (pguid: @GUID_Key; dwOfs:   7; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (  7 shl 8); dwFlags: 0),
  2736.     (pguid: @GUID_Key; dwOfs:   8; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (  8 shl 8); dwFlags: 0),
  2737.     (pguid: @GUID_Key; dwOfs:   9; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (  9 shl 8); dwFlags: 0),
  2738.     (pguid: @GUID_Key; dwOfs:  10; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 10 shl 8); dwFlags: 0),
  2739.     (pguid: @GUID_Key; dwOfs:  11; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 11 shl 8); dwFlags: 0),
  2740.     (pguid: @GUID_Key; dwOfs:  12; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 12 shl 8); dwFlags: 0),
  2741.     (pguid: @GUID_Key; dwOfs:  13; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 13 shl 8); dwFlags: 0),
  2742.     (pguid: @GUID_Key; dwOfs:  14; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 14 shl 8); dwFlags: 0),
  2743.     (pguid: @GUID_Key; dwOfs:  15; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 15 shl 8); dwFlags: 0),
  2744.     (pguid: @GUID_Key; dwOfs:  16; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 16 shl 8); dwFlags: 0),
  2745.     (pguid: @GUID_Key; dwOfs:  17; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 17 shl 8); dwFlags: 0),
  2746.     (pguid: @GUID_Key; dwOfs:  18; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 18 shl 8); dwFlags: 0),
  2747.     (pguid: @GUID_Key; dwOfs:  19; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 19 shl 8); dwFlags: 0),
  2748.     (pguid: @GUID_Key; dwOfs:  20; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 20 shl 8); dwFlags: 0),
  2749.     (pguid: @GUID_Key; dwOfs:  21; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 21 shl 8); dwFlags: 0),
  2750.     (pguid: @GUID_Key; dwOfs:  22; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 22 shl 8); dwFlags: 0),
  2751.     (pguid: @GUID_Key; dwOfs:  23; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 23 shl 8); dwFlags: 0),
  2752.     (pguid: @GUID_Key; dwOfs:  24; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 24 shl 8); dwFlags: 0),
  2753.     (pguid: @GUID_Key; dwOfs:  25; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 25 shl 8); dwFlags: 0),
  2754.     (pguid: @GUID_Key; dwOfs:  26; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 26 shl 8); dwFlags: 0),
  2755.     (pguid: @GUID_Key; dwOfs:  27; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 27 shl 8); dwFlags: 0),
  2756.     (pguid: @GUID_Key; dwOfs:  28; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 28 shl 8); dwFlags: 0),
  2757.     (pguid: @GUID_Key; dwOfs:  29; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 29 shl 8); dwFlags: 0),
  2758.     (pguid: @GUID_Key; dwOfs:  30; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 30 shl 8); dwFlags: 0),
  2759.     (pguid: @GUID_Key; dwOfs:  31; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 31 shl 8); dwFlags: 0),
  2760.     (pguid: @GUID_Key; dwOfs:  32; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 32 shl 8); dwFlags: 0),
  2761.     (pguid: @GUID_Key; dwOfs:  33; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 33 shl 8); dwFlags: 0),
  2762.     (pguid: @GUID_Key; dwOfs:  34; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 34 shl 8); dwFlags: 0),
  2763.     (pguid: @GUID_Key; dwOfs:  35; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 35 shl 8); dwFlags: 0),
  2764.     (pguid: @GUID_Key; dwOfs:  36; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 36 shl 8); dwFlags: 0),
  2765.     (pguid: @GUID_Key; dwOfs:  37; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 37 shl 8); dwFlags: 0),
  2766.     (pguid: @GUID_Key; dwOfs:  38; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 38 shl 8); dwFlags: 0),
  2767.     (pguid: @GUID_Key; dwOfs:  39; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 39 shl 8); dwFlags: 0),
  2768.     (pguid: @GUID_Key; dwOfs:  40; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 40 shl 8); dwFlags: 0),
  2769.     (pguid: @GUID_Key; dwOfs:  41; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 41 shl 8); dwFlags: 0),
  2770.     (pguid: @GUID_Key; dwOfs:  42; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 42 shl 8); dwFlags: 0),
  2771.     (pguid: @GUID_Key; dwOfs:  43; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 43 shl 8); dwFlags: 0),
  2772.     (pguid: @GUID_Key; dwOfs:  44; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 44 shl 8); dwFlags: 0),
  2773.     (pguid: @GUID_Key; dwOfs:  45; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 45 shl 8); dwFlags: 0),
  2774.     (pguid: @GUID_Key; dwOfs:  46; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 46 shl 8); dwFlags: 0),
  2775.     (pguid: @GUID_Key; dwOfs:  47; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 47 shl 8); dwFlags: 0),
  2776.     (pguid: @GUID_Key; dwOfs:  48; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 48 shl 8); dwFlags: 0),
  2777.     (pguid: @GUID_Key; dwOfs:  49; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 49 shl 8); dwFlags: 0),
  2778.     (pguid: @GUID_Key; dwOfs:  50; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 50 shl 8); dwFlags: 0),
  2779.     (pguid: @GUID_Key; dwOfs:  51; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 51 shl 8); dwFlags: 0),
  2780.     (pguid: @GUID_Key; dwOfs:  52; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 52 shl 8); dwFlags: 0),
  2781.     (pguid: @GUID_Key; dwOfs:  53; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 53 shl 8); dwFlags: 0),
  2782.     (pguid: @GUID_Key; dwOfs:  54; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 54 shl 8); dwFlags: 0),
  2783.     (pguid: @GUID_Key; dwOfs:  55; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 55 shl 8); dwFlags: 0),
  2784.     (pguid: @GUID_Key; dwOfs:  56; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 56 shl 8); dwFlags: 0),
  2785.     (pguid: @GUID_Key; dwOfs:  57; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 57 shl 8); dwFlags: 0),
  2786.     (pguid: @GUID_Key; dwOfs:  58; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 58 shl 8); dwFlags: 0),
  2787.     (pguid: @GUID_Key; dwOfs:  59; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 59 shl 8); dwFlags: 0),
  2788.     (pguid: @GUID_Key; dwOfs:  60; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 60 shl 8); dwFlags: 0),
  2789.     (pguid: @GUID_Key; dwOfs:  61; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 61 shl 8); dwFlags: 0),
  2790.     (pguid: @GUID_Key; dwOfs:  62; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 62 shl 8); dwFlags: 0),
  2791.     (pguid: @GUID_Key; dwOfs:  63; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 63 shl 8); dwFlags: 0),
  2792.     (pguid: @GUID_Key; dwOfs:  64; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 64 shl 8); dwFlags: 0),
  2793.     (pguid: @GUID_Key; dwOfs:  65; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 65 shl 8); dwFlags: 0),
  2794.     (pguid: @GUID_Key; dwOfs:  66; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 66 shl 8); dwFlags: 0),
  2795.     (pguid: @GUID_Key; dwOfs:  67; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 67 shl 8); dwFlags: 0),
  2796.     (pguid: @GUID_Key; dwOfs:  68; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 68 shl 8); dwFlags: 0),
  2797.     (pguid: @GUID_Key; dwOfs:  69; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 69 shl 8); dwFlags: 0),
  2798.     (pguid: @GUID_Key; dwOfs:  70; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 70 shl 8); dwFlags: 0),
  2799.     (pguid: @GUID_Key; dwOfs:  71; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 71 shl 8); dwFlags: 0),
  2800.     (pguid: @GUID_Key; dwOfs:  72; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 72 shl 8); dwFlags: 0),
  2801.     (pguid: @GUID_Key; dwOfs:  73; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 73 shl 8); dwFlags: 0),
  2802.     (pguid: @GUID_Key; dwOfs:  74; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 74 shl 8); dwFlags: 0),
  2803.     (pguid: @GUID_Key; dwOfs:  75; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 75 shl 8); dwFlags: 0),
  2804.     (pguid: @GUID_Key; dwOfs:  76; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 76 shl 8); dwFlags: 0),
  2805.     (pguid: @GUID_Key; dwOfs:  77; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 77 shl 8); dwFlags: 0),
  2806.     (pguid: @GUID_Key; dwOfs:  78; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 78 shl 8); dwFlags: 0),
  2807.     (pguid: @GUID_Key; dwOfs:  79; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 79 shl 8); dwFlags: 0),
  2808.     (pguid: @GUID_Key; dwOfs:  80; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 80 shl 8); dwFlags: 0),
  2809.     (pguid: @GUID_Key; dwOfs:  81; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 81 shl 8); dwFlags: 0),
  2810.     (pguid: @GUID_Key; dwOfs:  82; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 82 shl 8); dwFlags: 0),
  2811.     (pguid: @GUID_Key; dwOfs:  83; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 83 shl 8); dwFlags: 0),
  2812.     (pguid: @GUID_Key; dwOfs:  84; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 84 shl 8); dwFlags: 0),
  2813.     (pguid: @GUID_Key; dwOfs:  85; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 85 shl 8); dwFlags: 0),
  2814.     (pguid: @GUID_Key; dwOfs:  86; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 86 shl 8); dwFlags: 0),
  2815.     (pguid: @GUID_Key; dwOfs:  87; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 87 shl 8); dwFlags: 0),
  2816.     (pguid: @GUID_Key; dwOfs:  88; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 88 shl 8); dwFlags: 0),
  2817.     (pguid: @GUID_Key; dwOfs:  89; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 89 shl 8); dwFlags: 0),
  2818.     (pguid: @GUID_Key; dwOfs:  90; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 90 shl 8); dwFlags: 0),
  2819.     (pguid: @GUID_Key; dwOfs:  91; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 91 shl 8); dwFlags: 0),
  2820.     (pguid: @GUID_Key; dwOfs:  92; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 92 shl 8); dwFlags: 0),
  2821.     (pguid: @GUID_Key; dwOfs:  93; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 93 shl 8); dwFlags: 0),
  2822.     (pguid: @GUID_Key; dwOfs:  94; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 94 shl 8); dwFlags: 0),
  2823.     (pguid: @GUID_Key; dwOfs:  95; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 95 shl 8); dwFlags: 0),
  2824.     (pguid: @GUID_Key; dwOfs:  96; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 96 shl 8); dwFlags: 0),
  2825.     (pguid: @GUID_Key; dwOfs:  97; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 97 shl 8); dwFlags: 0),
  2826.     (pguid: @GUID_Key; dwOfs:  98; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 98 shl 8); dwFlags: 0),
  2827.     (pguid: @GUID_Key; dwOfs:  99; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or ( 99 shl 8); dwFlags: 0),
  2828.     (pguid: @GUID_Key; dwOfs: 100; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (100 shl 8); dwFlags: 0),
  2829.     (pguid: @GUID_Key; dwOfs: 101; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (101 shl 8); dwFlags: 0),
  2830.     (pguid: @GUID_Key; dwOfs: 102; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (102 shl 8); dwFlags: 0),
  2831.     (pguid: @GUID_Key; dwOfs: 103; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (103 shl 8); dwFlags: 0),
  2832.     (pguid: @GUID_Key; dwOfs: 104; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (104 shl 8); dwFlags: 0),
  2833.     (pguid: @GUID_Key; dwOfs: 105; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (105 shl 8); dwFlags: 0),
  2834.     (pguid: @GUID_Key; dwOfs: 106; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (106 shl 8); dwFlags: 0),
  2835.     (pguid: @GUID_Key; dwOfs: 107; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (107 shl 8); dwFlags: 0),
  2836.     (pguid: @GUID_Key; dwOfs: 108; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (108 shl 8); dwFlags: 0),
  2837.     (pguid: @GUID_Key; dwOfs: 109; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (109 shl 8); dwFlags: 0),
  2838.     (pguid: @GUID_Key; dwOfs: 110; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (110 shl 8); dwFlags: 0),
  2839.     (pguid: @GUID_Key; dwOfs: 111; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (111 shl 8); dwFlags: 0),
  2840.     (pguid: @GUID_Key; dwOfs: 112; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (112 shl 8); dwFlags: 0),
  2841.     (pguid: @GUID_Key; dwOfs: 113; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (113 shl 8); dwFlags: 0),
  2842.     (pguid: @GUID_Key; dwOfs: 114; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (114 shl 8); dwFlags: 0),
  2843.     (pguid: @GUID_Key; dwOfs: 115; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (115 shl 8); dwFlags: 0),
  2844.     (pguid: @GUID_Key; dwOfs: 116; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (116 shl 8); dwFlags: 0),
  2845.     (pguid: @GUID_Key; dwOfs: 117; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (117 shl 8); dwFlags: 0),
  2846.     (pguid: @GUID_Key; dwOfs: 118; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (118 shl 8); dwFlags: 0),
  2847.     (pguid: @GUID_Key; dwOfs: 119; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (119 shl 8); dwFlags: 0),
  2848.     (pguid: @GUID_Key; dwOfs: 120; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (120 shl 8); dwFlags: 0),
  2849.     (pguid: @GUID_Key; dwOfs: 121; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (121 shl 8); dwFlags: 0),
  2850.     (pguid: @GUID_Key; dwOfs: 122; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (122 shl 8); dwFlags: 0),
  2851.     (pguid: @GUID_Key; dwOfs: 123; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (123 shl 8); dwFlags: 0),
  2852.     (pguid: @GUID_Key; dwOfs: 124; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (124 shl 8); dwFlags: 0),
  2853.     (pguid: @GUID_Key; dwOfs: 125; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (125 shl 8); dwFlags: 0),
  2854.     (pguid: @GUID_Key; dwOfs: 126; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (126 shl 8); dwFlags: 0),
  2855.     (pguid: @GUID_Key; dwOfs: 127; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (127 shl 8); dwFlags: 0),
  2856.     (pguid: @GUID_Key; dwOfs: 128; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (128 shl 8); dwFlags: 0),
  2857.     (pguid: @GUID_Key; dwOfs: 129; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (129 shl 8); dwFlags: 0),
  2858.     (pguid: @GUID_Key; dwOfs: 130; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (130 shl 8); dwFlags: 0),
  2859.     (pguid: @GUID_Key; dwOfs: 131; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (131 shl 8); dwFlags: 0),
  2860.     (pguid: @GUID_Key; dwOfs: 132; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (132 shl 8); dwFlags: 0),
  2861.     (pguid: @GUID_Key; dwOfs: 133; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (133 shl 8); dwFlags: 0),
  2862.     (pguid: @GUID_Key; dwOfs: 134; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (134 shl 8); dwFlags: 0),
  2863.     (pguid: @GUID_Key; dwOfs: 135; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (135 shl 8); dwFlags: 0),
  2864.     (pguid: @GUID_Key; dwOfs: 136; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (136 shl 8); dwFlags: 0),
  2865.     (pguid: @GUID_Key; dwOfs: 137; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (137 shl 8); dwFlags: 0),
  2866.     (pguid: @GUID_Key; dwOfs: 138; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (138 shl 8); dwFlags: 0),
  2867.     (pguid: @GUID_Key; dwOfs: 139; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (139 shl 8); dwFlags: 0),
  2868.     (pguid: @GUID_Key; dwOfs: 140; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (140 shl 8); dwFlags: 0),
  2869.     (pguid: @GUID_Key; dwOfs: 141; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (141 shl 8); dwFlags: 0),
  2870.     (pguid: @GUID_Key; dwOfs: 142; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (142 shl 8); dwFlags: 0),
  2871.     (pguid: @GUID_Key; dwOfs: 143; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (143 shl 8); dwFlags: 0),
  2872.     (pguid: @GUID_Key; dwOfs: 144; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (144 shl 8); dwFlags: 0),
  2873.     (pguid: @GUID_Key; dwOfs: 145; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (145 shl 8); dwFlags: 0),
  2874.     (pguid: @GUID_Key; dwOfs: 146; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (146 shl 8); dwFlags: 0),
  2875.     (pguid: @GUID_Key; dwOfs: 147; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (147 shl 8); dwFlags: 0),
  2876.     (pguid: @GUID_Key; dwOfs: 148; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (148 shl 8); dwFlags: 0),
  2877.     (pguid: @GUID_Key; dwOfs: 149; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (149 shl 8); dwFlags: 0),
  2878.     (pguid: @GUID_Key; dwOfs: 150; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (150 shl 8); dwFlags: 0),
  2879.     (pguid: @GUID_Key; dwOfs: 151; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (151 shl 8); dwFlags: 0),
  2880.     (pguid: @GUID_Key; dwOfs: 152; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (152 shl 8); dwFlags: 0),
  2881.     (pguid: @GUID_Key; dwOfs: 153; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (153 shl 8); dwFlags: 0),
  2882.     (pguid: @GUID_Key; dwOfs: 154; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (154 shl 8); dwFlags: 0),
  2883.     (pguid: @GUID_Key; dwOfs: 155; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (155 shl 8); dwFlags: 0),
  2884.     (pguid: @GUID_Key; dwOfs: 156; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (156 shl 8); dwFlags: 0),
  2885.     (pguid: @GUID_Key; dwOfs: 157; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (157 shl 8); dwFlags: 0),
  2886.     (pguid: @GUID_Key; dwOfs: 158; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (158 shl 8); dwFlags: 0),
  2887.     (pguid: @GUID_Key; dwOfs: 159; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (159 shl 8); dwFlags: 0),
  2888.     (pguid: @GUID_Key; dwOfs: 160; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (160 shl 8); dwFlags: 0),
  2889.     (pguid: @GUID_Key; dwOfs: 161; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (161 shl 8); dwFlags: 0),
  2890.     (pguid: @GUID_Key; dwOfs: 162; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (162 shl 8); dwFlags: 0),
  2891.     (pguid: @GUID_Key; dwOfs: 163; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (163 shl 8); dwFlags: 0),
  2892.     (pguid: @GUID_Key; dwOfs: 164; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (164 shl 8); dwFlags: 0),
  2893.     (pguid: @GUID_Key; dwOfs: 165; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (165 shl 8); dwFlags: 0),
  2894.     (pguid: @GUID_Key; dwOfs: 166; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (166 shl 8); dwFlags: 0),
  2895.     (pguid: @GUID_Key; dwOfs: 167; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (167 shl 8); dwFlags: 0),
  2896.     (pguid: @GUID_Key; dwOfs: 168; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (168 shl 8); dwFlags: 0),
  2897.     (pguid: @GUID_Key; dwOfs: 169; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (169 shl 8); dwFlags: 0),
  2898.     (pguid: @GUID_Key; dwOfs: 170; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (170 shl 8); dwFlags: 0),
  2899.     (pguid: @GUID_Key; dwOfs: 171; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (171 shl 8); dwFlags: 0),
  2900.     (pguid: @GUID_Key; dwOfs: 172; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (172 shl 8); dwFlags: 0),
  2901.     (pguid: @GUID_Key; dwOfs: 173; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (173 shl 8); dwFlags: 0),
  2902.     (pguid: @GUID_Key; dwOfs: 174; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (174 shl 8); dwFlags: 0),
  2903.     (pguid: @GUID_Key; dwOfs: 175; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (175 shl 8); dwFlags: 0),
  2904.     (pguid: @GUID_Key; dwOfs: 176; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (176 shl 8); dwFlags: 0),
  2905.     (pguid: @GUID_Key; dwOfs: 177; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (177 shl 8); dwFlags: 0),
  2906.     (pguid: @GUID_Key; dwOfs: 178; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (178 shl 8); dwFlags: 0),
  2907.     (pguid: @GUID_Key; dwOfs: 179; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (179 shl 8); dwFlags: 0),
  2908.     (pguid: @GUID_Key; dwOfs: 180; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (180 shl 8); dwFlags: 0),
  2909.     (pguid: @GUID_Key; dwOfs: 181; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (181 shl 8); dwFlags: 0),
  2910.     (pguid: @GUID_Key; dwOfs: 182; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (182 shl 8); dwFlags: 0),
  2911.     (pguid: @GUID_Key; dwOfs: 183; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (183 shl 8); dwFlags: 0),
  2912.     (pguid: @GUID_Key; dwOfs: 184; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (184 shl 8); dwFlags: 0),
  2913.     (pguid: @GUID_Key; dwOfs: 185; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (185 shl 8); dwFlags: 0),
  2914.     (pguid: @GUID_Key; dwOfs: 186; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (186 shl 8); dwFlags: 0),
  2915.     (pguid: @GUID_Key; dwOfs: 187; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (187 shl 8); dwFlags: 0),
  2916.     (pguid: @GUID_Key; dwOfs: 188; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (188 shl 8); dwFlags: 0),
  2917.     (pguid: @GUID_Key; dwOfs: 189; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (189 shl 8); dwFlags: 0),
  2918.     (pguid: @GUID_Key; dwOfs: 190; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (190 shl 8); dwFlags: 0),
  2919.     (pguid: @GUID_Key; dwOfs: 191; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (191 shl 8); dwFlags: 0),
  2920.     (pguid: @GUID_Key; dwOfs: 192; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (192 shl 8); dwFlags: 0),
  2921.     (pguid: @GUID_Key; dwOfs: 193; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (193 shl 8); dwFlags: 0),
  2922.     (pguid: @GUID_Key; dwOfs: 194; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (194 shl 8); dwFlags: 0),
  2923.     (pguid: @GUID_Key; dwOfs: 195; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (195 shl 8); dwFlags: 0),
  2924.     (pguid: @GUID_Key; dwOfs: 196; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (196 shl 8); dwFlags: 0),
  2925.     (pguid: @GUID_Key; dwOfs: 197; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (197 shl 8); dwFlags: 0),
  2926.     (pguid: @GUID_Key; dwOfs: 198; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (198 shl 8); dwFlags: 0),
  2927.     (pguid: @GUID_Key; dwOfs: 199; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (199 shl 8); dwFlags: 0),
  2928.     (pguid: @GUID_Key; dwOfs: 200; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (200 shl 8); dwFlags: 0),
  2929.     (pguid: @GUID_Key; dwOfs: 201; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (201 shl 8); dwFlags: 0),
  2930.     (pguid: @GUID_Key; dwOfs: 202; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (202 shl 8); dwFlags: 0),
  2931.     (pguid: @GUID_Key; dwOfs: 203; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (203 shl 8); dwFlags: 0),
  2932.     (pguid: @GUID_Key; dwOfs: 204; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (204 shl 8); dwFlags: 0),
  2933.     (pguid: @GUID_Key; dwOfs: 205; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (205 shl 8); dwFlags: 0),
  2934.     (pguid: @GUID_Key; dwOfs: 206; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (206 shl 8); dwFlags: 0),
  2935.     (pguid: @GUID_Key; dwOfs: 207; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (207 shl 8); dwFlags: 0),
  2936.     (pguid: @GUID_Key; dwOfs: 208; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (208 shl 8); dwFlags: 0),
  2937.     (pguid: @GUID_Key; dwOfs: 209; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (209 shl 8); dwFlags: 0),
  2938.     (pguid: @GUID_Key; dwOfs: 210; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (210 shl 8); dwFlags: 0),
  2939.     (pguid: @GUID_Key; dwOfs: 211; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (211 shl 8); dwFlags: 0),
  2940.     (pguid: @GUID_Key; dwOfs: 212; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (212 shl 8); dwFlags: 0),
  2941.     (pguid: @GUID_Key; dwOfs: 213; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (213 shl 8); dwFlags: 0),
  2942.     (pguid: @GUID_Key; dwOfs: 214; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (214 shl 8); dwFlags: 0),
  2943.     (pguid: @GUID_Key; dwOfs: 215; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (215 shl 8); dwFlags: 0),
  2944.     (pguid: @GUID_Key; dwOfs: 216; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (216 shl 8); dwFlags: 0),
  2945.     (pguid: @GUID_Key; dwOfs: 217; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (217 shl 8); dwFlags: 0),
  2946.     (pguid: @GUID_Key; dwOfs: 218; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (218 shl 8); dwFlags: 0),
  2947.     (pguid: @GUID_Key; dwOfs: 219; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (219 shl 8); dwFlags: 0),
  2948.     (pguid: @GUID_Key; dwOfs: 220; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (220 shl 8); dwFlags: 0),
  2949.     (pguid: @GUID_Key; dwOfs: 221; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (221 shl 8); dwFlags: 0),
  2950.     (pguid: @GUID_Key; dwOfs: 222; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (222 shl 8); dwFlags: 0),
  2951.     (pguid: @GUID_Key; dwOfs: 223; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (223 shl 8); dwFlags: 0),
  2952.     (pguid: @GUID_Key; dwOfs: 224; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (224 shl 8); dwFlags: 0),
  2953.     (pguid: @GUID_Key; dwOfs: 225; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (225 shl 8); dwFlags: 0),
  2954.     (pguid: @GUID_Key; dwOfs: 226; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (226 shl 8); dwFlags: 0),
  2955.     (pguid: @GUID_Key; dwOfs: 227; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (227 shl 8); dwFlags: 0),
  2956.     (pguid: @GUID_Key; dwOfs: 228; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (228 shl 8); dwFlags: 0),
  2957.     (pguid: @GUID_Key; dwOfs: 229; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (229 shl 8); dwFlags: 0),
  2958.     (pguid: @GUID_Key; dwOfs: 230; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (230 shl 8); dwFlags: 0),
  2959.     (pguid: @GUID_Key; dwOfs: 231; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (231 shl 8); dwFlags: 0),
  2960.     (pguid: @GUID_Key; dwOfs: 232; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (232 shl 8); dwFlags: 0),
  2961.     (pguid: @GUID_Key; dwOfs: 233; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (233 shl 8); dwFlags: 0),
  2962.     (pguid: @GUID_Key; dwOfs: 234; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (234 shl 8); dwFlags: 0),
  2963.     (pguid: @GUID_Key; dwOfs: 235; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (235 shl 8); dwFlags: 0),
  2964.     (pguid: @GUID_Key; dwOfs: 236; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (236 shl 8); dwFlags: 0),
  2965.     (pguid: @GUID_Key; dwOfs: 237; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (237 shl 8); dwFlags: 0),
  2966.     (pguid: @GUID_Key; dwOfs: 238; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (238 shl 8); dwFlags: 0),
  2967.     (pguid: @GUID_Key; dwOfs: 239; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (239 shl 8); dwFlags: 0),
  2968.     (pguid: @GUID_Key; dwOfs: 240; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (240 shl 8); dwFlags: 0),
  2969.     (pguid: @GUID_Key; dwOfs: 241; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (241 shl 8); dwFlags: 0),
  2970.     (pguid: @GUID_Key; dwOfs: 242; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (242 shl 8); dwFlags: 0),
  2971.     (pguid: @GUID_Key; dwOfs: 243; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (243 shl 8); dwFlags: 0),
  2972.     (pguid: @GUID_Key; dwOfs: 244; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (244 shl 8); dwFlags: 0),
  2973.     (pguid: @GUID_Key; dwOfs: 245; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (245 shl 8); dwFlags: 0),
  2974.     (pguid: @GUID_Key; dwOfs: 246; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (246 shl 8); dwFlags: 0),
  2975.     (pguid: @GUID_Key; dwOfs: 247; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (247 shl 8); dwFlags: 0),
  2976.     (pguid: @GUID_Key; dwOfs: 248; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (248 shl 8); dwFlags: 0),
  2977.     (pguid: @GUID_Key; dwOfs: 249; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (249 shl 8); dwFlags: 0),
  2978.     (pguid: @GUID_Key; dwOfs: 250; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (250 shl 8); dwFlags: 0),
  2979.     (pguid: @GUID_Key; dwOfs: 251; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (251 shl 8); dwFlags: 0),
  2980.     (pguid: @GUID_Key; dwOfs: 252; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (252 shl 8); dwFlags: 0),
  2981.     (pguid: @GUID_Key; dwOfs: 253; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (253 shl 8); dwFlags: 0),
  2982.     (pguid: @GUID_Key; dwOfs: 254; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (254 shl 8); dwFlags: 0),
  2983.     (pguid: @GUID_Key; dwOfs: 255; dwType: DIDFT_BUTTON or DIPROPRANGE_NOMIN or (255 shl 8); dwFlags: 0)
  2984.   );
  2985.   {$EXTERNALSYM rgodfKeyboard}
  2986.  
  2987. const
  2988.   c_dfDIKeyboard: TDIDataFormat = (
  2989.     dwSize     : Sizeof(c_dfDIKeyboard);
  2990.     dwObjSize  : Sizeof(TDIObjectDataFormat);
  2991.     dwFlags    : DIDF_RELAXIS;
  2992.     dwDataSize : 256;
  2993.     dwNumObjs  : High(rgodfKeyboard) + 1;
  2994.     rgodf      : @rgodfKeyboard
  2995.   );
  2996.   {$EXTERNALSYM c_dfDIKeyboard}
  2997.  
  2998.  
  2999. {$IFDEF DIRECTINPUT_VERSION_5} (* #if(DIRECTINPUT_VERSION >= 0x0500) *)
  3000.   rgodfJoystick: array[0..43] of TDIObjectDataFormat = (
  3001.     (pguid: @GUID_XAxis;  dwOfs: DIJOFS_X;  dwType: DIDFT_AXIS or DIDFT_ANYINSTANCE or $80000000; dwFlags: DIDOI_ASPECTPOSITION),
  3002.     (pguid: @GUID_YAxis;  dwOfs: DIJOFS_Y;  dwType: DIDFT_AXIS or DIDFT_ANYINSTANCE or $80000000; dwFlags: DIDOI_ASPECTPOSITION),
  3003.     (pguid: @GUID_ZAxis;  dwOfs: DIJOFS_Z;  dwType: DIDFT_AXIS or DIDFT_ANYINSTANCE or $80000000; dwFlags: DIDOI_ASPECTPOSITION),
  3004.     (pguid: @GUID_RxAxis; dwOfs: DIJOFS_RX; dwType: DIDFT_AXIS or DIDFT_ANYINSTANCE or $80000000; dwFlags: DIDOI_ASPECTPOSITION),
  3005.     (pguid: @GUID_RyAxis; dwOfs: DIJOFS_RY; dwType: DIDFT_AXIS or DIDFT_ANYINSTANCE or $80000000; dwFlags: DIDOI_ASPECTPOSITION),
  3006.     (pguid: @GUID_RzAxis; dwOfs: DIJOFS_RZ; dwType: DIDFT_AXIS or DIDFT_ANYINSTANCE or $80000000; dwFlags: DIDOI_ASPECTPOSITION),
  3007.     // 2 Sliders
  3008.     (pguid: @GUID_Slider; dwOfs: 24; dwType: DIDFT_AXIS or DIDFT_ANYINSTANCE or $80000000; dwFlags: DIDOI_ASPECTPOSITION),
  3009.     (pguid: @GUID_Slider; dwOfs: 28; dwType: DIDFT_AXIS or DIDFT_ANYINSTANCE or $80000000; dwFlags: DIDOI_ASPECTPOSITION),
  3010.     // 4 POVs (yes, really)
  3011.     (pguid: @GUID_POV; dwOfs: 32; dwType: DIDFT_POV or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3012.     (pguid: @GUID_POV; dwOfs: 36; dwType: DIDFT_POV or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3013.     (pguid: @GUID_POV; dwOfs: 40; dwType: DIDFT_POV or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3014.     (pguid: @GUID_POV; dwOfs: 44; dwType: DIDFT_POV or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3015.     // Buttons
  3016.     (pguid: nil; dwOfs: DIJOFS_BUTTON0;  dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3017.     (pguid: nil; dwOfs: DIJOFS_BUTTON1;  dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3018.     (pguid: nil; dwOfs: DIJOFS_BUTTON2;  dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3019.     (pguid: nil; dwOfs: DIJOFS_BUTTON3;  dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3020.     (pguid: nil; dwOfs: DIJOFS_BUTTON4;  dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3021.     (pguid: nil; dwOfs: DIJOFS_BUTTON5;  dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3022.     (pguid: nil; dwOfs: DIJOFS_BUTTON6;  dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3023.     (pguid: nil; dwOfs: DIJOFS_BUTTON7;  dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3024.     (pguid: nil; dwOfs: DIJOFS_BUTTON8;  dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3025.     (pguid: nil; dwOfs: DIJOFS_BUTTON9;  dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3026.     (pguid: nil; dwOfs: DIJOFS_BUTTON10; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3027.     (pguid: nil; dwOfs: DIJOFS_BUTTON11; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3028.     (pguid: nil; dwOfs: DIJOFS_BUTTON12; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3029.     (pguid: nil; dwOfs: DIJOFS_BUTTON13; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3030.     (pguid: nil; dwOfs: DIJOFS_BUTTON14; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3031.     (pguid: nil; dwOfs: DIJOFS_BUTTON15; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3032.     (pguid: nil; dwOfs: DIJOFS_BUTTON16; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3033.     (pguid: nil; dwOfs: DIJOFS_BUTTON17; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3034.     (pguid: nil; dwOfs: DIJOFS_BUTTON18; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3035.     (pguid: nil; dwOfs: DIJOFS_BUTTON19; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3036.     (pguid: nil; dwOfs: DIJOFS_BUTTON20; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3037.     (pguid: nil; dwOfs: DIJOFS_BUTTON21; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3038.     (pguid: nil; dwOfs: DIJOFS_BUTTON22; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3039.     (pguid: nil; dwOfs: DIJOFS_BUTTON23; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3040.     (pguid: nil; dwOfs: DIJOFS_BUTTON24; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3041.     (pguid: nil; dwOfs: DIJOFS_BUTTON25; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3042.     (pguid: nil; dwOfs: DIJOFS_BUTTON26; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3043.     (pguid: nil; dwOfs: DIJOFS_BUTTON27; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3044.     (pguid: nil; dwOfs: DIJOFS_BUTTON28; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3045.     (pguid: nil; dwOfs: DIJOFS_BUTTON29; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3046.     (pguid: nil; dwOfs: DIJOFS_BUTTON30; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3047.     (pguid: nil; dwOfs: DIJOFS_BUTTON31; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0)
  3048.   );
  3049.   {$EXTERNALSYM rgodfJoystick}
  3050.  
  3051.   c_dfDIJoystick: TDIDataFormat = (
  3052.     dwSize     : Sizeof(c_dfDIJoystick);
  3053.     dwObjSize  : Sizeof(TDIObjectDataFormat);  // $10
  3054.     dwFlags    : DIDF_ABSAXIS;
  3055.     dwDataSize : SizeOf(TDIJoyState);         // $10
  3056.     dwNumObjs  : High(rgodfJoystick) + 1;  // $2C
  3057.     rgodf      : @rgodfJoystick
  3058.   );
  3059.   {$EXTERNALSYM c_dfDIJoystick}
  3060.  
  3061.  
  3062.   rgodfJoystick2: array[0..163] of TDIObjectDataFormat = (
  3063.     (pguid: @GUID_XAxis;  dwOfs: DIJOFS_X;  dwType: DIDFT_AXIS or DIDFT_ANYINSTANCE or $80000000; dwFlags: DIDOI_ASPECTPOSITION),
  3064.     (pguid: @GUID_YAxis;  dwOfs: DIJOFS_Y;  dwType: DIDFT_AXIS or DIDFT_ANYINSTANCE or $80000000; dwFlags: DIDOI_ASPECTPOSITION),
  3065.     (pguid: @GUID_ZAxis;  dwOfs: DIJOFS_Z;  dwType: DIDFT_AXIS or DIDFT_ANYINSTANCE or $80000000; dwFlags: DIDOI_ASPECTPOSITION),
  3066.     (pguid: @GUID_RxAxis; dwOfs: DIJOFS_RX; dwType: DIDFT_AXIS or DIDFT_ANYINSTANCE or $80000000; dwFlags: DIDOI_ASPECTPOSITION),
  3067.     (pguid: @GUID_RyAxis; dwOfs: DIJOFS_RY; dwType: DIDFT_AXIS or DIDFT_ANYINSTANCE or $80000000; dwFlags: DIDOI_ASPECTPOSITION),
  3068.     (pguid: @GUID_RzAxis; dwOfs: DIJOFS_RZ; dwType: DIDFT_AXIS or DIDFT_ANYINSTANCE or $80000000; dwFlags: DIDOI_ASPECTPOSITION),
  3069.     // 2 Sliders
  3070.     (pguid: @GUID_Slider; dwOfs: 24; dwType: DIDFT_AXIS or DIDFT_ANYINSTANCE or $80000000; dwFlags: DIDOI_ASPECTPOSITION),
  3071.     (pguid: @GUID_Slider; dwOfs: 28; dwType: DIDFT_AXIS or DIDFT_ANYINSTANCE or $80000000; dwFlags: DIDOI_ASPECTPOSITION),
  3072.     // 4 POVs (yes, really)
  3073.     (pguid: @GUID_POV; dwOfs: 32; dwType: DIDFT_POV or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3074.     (pguid: @GUID_POV; dwOfs: 36; dwType: DIDFT_POV or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3075.     (pguid: @GUID_POV; dwOfs: 40; dwType: DIDFT_POV or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3076.     (pguid: @GUID_POV; dwOfs: 44; dwType: DIDFT_POV or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3077.     // Buttons
  3078.     (pguid: nil; dwOfs: DIJOFS_BUTTON0;  dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3079.     (pguid: nil; dwOfs: DIJOFS_BUTTON1;  dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3080.     (pguid: nil; dwOfs: DIJOFS_BUTTON2;  dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3081.     (pguid: nil; dwOfs: DIJOFS_BUTTON3;  dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3082.     (pguid: nil; dwOfs: DIJOFS_BUTTON4;  dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3083.     (pguid: nil; dwOfs: DIJOFS_BUTTON5;  dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3084.     (pguid: nil; dwOfs: DIJOFS_BUTTON6;  dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3085.     (pguid: nil; dwOfs: DIJOFS_BUTTON7;  dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3086.     (pguid: nil; dwOfs: DIJOFS_BUTTON8;  dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3087.     (pguid: nil; dwOfs: DIJOFS_BUTTON9;  dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3088.     (pguid: nil; dwOfs: DIJOFS_BUTTON10; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3089.     (pguid: nil; dwOfs: DIJOFS_BUTTON11; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3090.     (pguid: nil; dwOfs: DIJOFS_BUTTON12; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3091.     (pguid: nil; dwOfs: DIJOFS_BUTTON13; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3092.     (pguid: nil; dwOfs: DIJOFS_BUTTON14; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3093.     (pguid: nil; dwOfs: DIJOFS_BUTTON15; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3094.     (pguid: nil; dwOfs: DIJOFS_BUTTON16; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3095.     (pguid: nil; dwOfs: DIJOFS_BUTTON17; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3096.     (pguid: nil; dwOfs: DIJOFS_BUTTON18; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3097.     (pguid: nil; dwOfs: DIJOFS_BUTTON19; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3098.     (pguid: nil; dwOfs: DIJOFS_BUTTON20; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3099.     (pguid: nil; dwOfs: DIJOFS_BUTTON21; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3100.     (pguid: nil; dwOfs: DIJOFS_BUTTON22; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3101.     (pguid: nil; dwOfs: DIJOFS_BUTTON23; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3102.     (pguid: nil; dwOfs: DIJOFS_BUTTON24; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3103.     (pguid: nil; dwOfs: DIJOFS_BUTTON25; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3104.     (pguid: nil; dwOfs: DIJOFS_BUTTON26; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3105.     (pguid: nil; dwOfs: DIJOFS_BUTTON27; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3106.     (pguid: nil; dwOfs: DIJOFS_BUTTON28; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3107.     (pguid: nil; dwOfs: DIJOFS_BUTTON29; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3108.     (pguid: nil; dwOfs: DIJOFS_BUTTON30; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3109.     (pguid: nil; dwOfs: DIJOFS_BUTTON31; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: 0),
  3110.     (pguid: nil; dwOfs:  80; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3111.     (pguid: nil; dwOfs:  81; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3112.     (pguid: nil; dwOfs:  82; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3113.     (pguid: nil; dwOfs:  83; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3114.     (pguid: nil; dwOfs:  84; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3115.     (pguid: nil; dwOfs:  85; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3116.     (pguid: nil; dwOfs:  86; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3117.     (pguid: nil; dwOfs:  87; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3118.     (pguid: nil; dwOfs:  88; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3119.     (pguid: nil; dwOfs:  89; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3120.     (pguid: nil; dwOfs:  90; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3121.     (pguid: nil; dwOfs:  91; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3122.     (pguid: nil; dwOfs:  92; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3123.     (pguid: nil; dwOfs:  93; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3124.     (pguid: nil; dwOfs:  94; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3125.     (pguid: nil; dwOfs:  95; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3126.     (pguid: nil; dwOfs:  96; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3127.     (pguid: nil; dwOfs:  97; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3128.     (pguid: nil; dwOfs:  98; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3129.     (pguid: nil; dwOfs:  99; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3130.     (pguid: nil; dwOfs: 100; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3131.     (pguid: nil; dwOfs: 101; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3132.     (pguid: nil; dwOfs: 102; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3133.     (pguid: nil; dwOfs: 103; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3134.     (pguid: nil; dwOfs: 104; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3135.     (pguid: nil; dwOfs: 105; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3136.     (pguid: nil; dwOfs: 106; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3137.     (pguid: nil; dwOfs: 107; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3138.     (pguid: nil; dwOfs: 108; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3139.     (pguid: nil; dwOfs: 109; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3140.     (pguid: nil; dwOfs: 110; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3141.     (pguid: nil; dwOfs: 111; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3142.     (pguid: nil; dwOfs: 112; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3143.     (pguid: nil; dwOfs: 113; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3144.     (pguid: nil; dwOfs: 114; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3145.     (pguid: nil; dwOfs: 115; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3146.     (pguid: nil; dwOfs: 116; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3147.     (pguid: nil; dwOfs: 117; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3148.     (pguid: nil; dwOfs: 118; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3149.     (pguid: nil; dwOfs: 119; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3150.     (pguid: nil; dwOfs: 120; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3151.     (pguid: nil; dwOfs: 121; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3152.     (pguid: nil; dwOfs: 122; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3153.     (pguid: nil; dwOfs: 123; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3154.     (pguid: nil; dwOfs: 124; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3155.     (pguid: nil; dwOfs: 125; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3156.     (pguid: nil; dwOfs: 126; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3157.     (pguid: nil; dwOfs: 127; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3158.     (pguid: nil; dwOfs: 128; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3159.     (pguid: nil; dwOfs: 129; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3160.     (pguid: nil; dwOfs: 130; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3161.     (pguid: nil; dwOfs: 131; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3162.     (pguid: nil; dwOfs: 132; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3163.     (pguid: nil; dwOfs: 133; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3164.     (pguid: nil; dwOfs: 134; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3165.     (pguid: nil; dwOfs: 135; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3166.     (pguid: nil; dwOfs: 136; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3167.     (pguid: nil; dwOfs: 137; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3168.     (pguid: nil; dwOfs: 138; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3169.     (pguid: nil; dwOfs: 139; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3170.     (pguid: nil; dwOfs: 140; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3171.     (pguid: nil; dwOfs: 141; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3172.     (pguid: nil; dwOfs: 142; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3173.     (pguid: nil; dwOfs: 143; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3174.     (pguid: nil; dwOfs: 144; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3175.     (pguid: nil; dwOfs: 145; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3176.     (pguid: nil; dwOfs: 146; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3177.     (pguid: nil; dwOfs: 147; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3178.     (pguid: nil; dwOfs: 148; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3179.     (pguid: nil; dwOfs: 149; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3180.     (pguid: nil; dwOfs: 150; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3181.     (pguid: nil; dwOfs: 151; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3182.     (pguid: nil; dwOfs: 152; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3183.     (pguid: nil; dwOfs: 153; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3184.     (pguid: nil; dwOfs: 154; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3185.     (pguid: nil; dwOfs: 155; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3186.     (pguid: nil; dwOfs: 156; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3187.     (pguid: nil; dwOfs: 157; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3188.     (pguid: nil; dwOfs: 158; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3189.     (pguid: nil; dwOfs: 159; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3190.     (pguid: nil; dwOfs: 160; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3191.     (pguid: nil; dwOfs: 161; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3192.     (pguid: nil; dwOfs: 162; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3193.     (pguid: nil; dwOfs: 163; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3194.     (pguid: nil; dwOfs: 164; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3195.     (pguid: nil; dwOfs: 165; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3196.     (pguid: nil; dwOfs: 166; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3197.     (pguid: nil; dwOfs: 167; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3198.     (pguid: nil; dwOfs: 168; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3199.     (pguid: nil; dwOfs: 169; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3200.     (pguid: nil; dwOfs: 170; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3201.     (pguid: nil; dwOfs: 171; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3202.     (pguid: nil; dwOfs: 172; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3203.     (pguid: nil; dwOfs: 173; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3204.     (pguid: nil; dwOfs: 174; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3205.     (pguid: nil; dwOfs: 175; dwType: DIDFT_BUTTON or DIDFT_ANYINSTANCE or $80000000; dwFlags: $0),
  3206.     (pguid: @GUID_XAxis;  dwOfs: 176; dwType: DIDFT_AXIS or DIDFT_ANYINSTANCE or $80000000; dwFlags: DIDOI_ASPECTVELOCITY),
  3207.     (pguid: @GUID_YAxis;  dwOfs: 180; dwType: DIDFT_AXIS or DIDFT_ANYINSTANCE or $80000000; dwFlags: DIDOI_ASPECTVELOCITY),
  3208.     (pguid: @GUID_ZAxis;  dwOfs: 184; dwType: DIDFT_AXIS or DIDFT_ANYINSTANCE or $80000000; dwFlags: DIDOI_ASPECTVELOCITY),
  3209.     (pguid: @GUID_RxAxis; dwOfs: 188; dwType: DIDFT_AXIS or DIDFT_ANYINSTANCE or $80000000; dwFlags: DIDOI_ASPECTVELOCITY),
  3210.     (pguid: @GUID_RyAxis; dwOfs: 192; dwType: DIDFT_AXIS or DIDFT_ANYINSTANCE or $80000000; dwFlags: DIDOI_ASPECTVELOCITY),
  3211.     (pguid: @GUID_RzAxis; dwOfs: 196; dwType: DIDFT_AXIS or DIDFT_ANYINSTANCE or $80000000; dwFlags: DIDOI_ASPECTVELOCITY),
  3212.     (pguid: @GUID_Slider; dwOfs:  24; dwType: DIDFT_AXIS or DIDFT_ANYINSTANCE or $80000000; dwFlags: DIDOI_ASPECTVELOCITY),
  3213.     (pguid: @GUID_Slider; dwOfs:  28; dwType: DIDFT_AXIS or DIDFT_ANYINSTANCE or $80000000; dwFlags: DIDOI_ASPECTVELOCITY),
  3214.     (pguid: @GUID_XAxis;  dwOfs: 208; dwType: DIDFT_AXIS or DIDFT_ANYINSTANCE or $80000000; dwFlags: DIDOI_ASPECTACCEL),
  3215.     (pguid: @GUID_YAxis;  dwOfs: 212; dwType: DIDFT_AXIS or DIDFT_ANYINSTANCE or $80000000; dwFlags: DIDOI_ASPECTACCEL),
  3216.     (pguid: @GUID_ZAxis;  dwOfs: 216; dwType: DIDFT_AXIS or DIDFT_ANYINSTANCE or $80000000; dwFlags: DIDOI_ASPECTACCEL),
  3217.     (pguid: @GUID_RxAxis; dwOfs: 220; dwType: DIDFT_AXIS or DIDFT_ANYINSTANCE or $80000000; dwFlags: DIDOI_ASPECTACCEL),
  3218.     (pguid: @GUID_RyAxis; dwOfs: 224; dwType: DIDFT_AXIS or DIDFT_ANYINSTANCE or $80000000; dwFlags: DIDOI_ASPECTACCEL),
  3219.     (pguid: @GUID_RzAxis; dwOfs: 228; dwType: DIDFT_AXIS or DIDFT_ANYINSTANCE or $80000000; dwFlags: DIDOI_ASPECTACCEL),
  3220.     (pguid: @GUID_Slider; dwOfs:  24; dwType: DIDFT_AXIS or DIDFT_ANYINSTANCE or $80000000; dwFlags: DIDOI_ASPECTACCEL),
  3221.     (pguid: @GUID_Slider; dwOfs:  28; dwType: DIDFT_AXIS or DIDFT_ANYINSTANCE or $80000000; dwFlags: DIDOI_ASPECTACCEL),
  3222.     (pguid: @GUID_XAxis;  dwOfs: 240; dwType: DIDFT_AXIS or DIDFT_ANYINSTANCE or $80000000; dwFlags: DIDOI_ASPECTFORCE),
  3223.     (pguid: @GUID_YAxis;  dwOfs: 244; dwType: DIDFT_AXIS or DIDFT_ANYINSTANCE or $80000000; dwFlags: DIDOI_ASPECTFORCE),
  3224.     (pguid: @GUID_ZAxis;  dwOfs: 248; dwType: DIDFT_AXIS or DIDFT_ANYINSTANCE or $80000000; dwFlags: DIDOI_ASPECTFORCE),
  3225.     (pguid: @GUID_RxAxis; dwOfs: 252; dwType: DIDFT_AXIS or DIDFT_ANYINSTANCE or $80000000; dwFlags: DIDOI_ASPECTFORCE),
  3226.     (pguid: @GUID_RyAxis; dwOfs: 256; dwType: DIDFT_AXIS or DIDFT_ANYINSTANCE or $80000000; dwFlags: DIDOI_ASPECTFORCE),
  3227.     (pguid: @GUID_RzAxis; dwOfs: 260; dwType: DIDFT_AXIS or DIDFT_ANYINSTANCE or $80000000; dwFlags: DIDOI_ASPECTFORCE),
  3228.     (pguid: @GUID_Slider; dwOfs:  24; dwType: DIDFT_AXIS or DIDFT_ANYINSTANCE or $80000000; dwFlags: DIDOI_ASPECTFORCE),
  3229.     (pguid: @GUID_Slider; dwOfs:  28; dwType: DIDFT_AXIS or DIDFT_ANYINSTANCE or $80000000; dwFlags: DIDOI_ASPECTFORCE)
  3230.   );
  3231.   {$EXTERNALSYM rgodfJoystick2}
  3232.  
  3233.   c_dfDIJoystick2: TDIDataFormat = (
  3234.     dwSize     : Sizeof(c_dfDIJoystick2);
  3235.     dwObjSize  : Sizeof(TDIObjectDataFormat);
  3236.     dwFlags    : DIDF_ABSAXIS;
  3237.     dwDataSize : SizeOf(TDIJoyState2);
  3238.     dwNumObjs  : High(rgodfJoystick2) + 1;
  3239.     rgodf      : @rgodfJoystick2
  3240.   );
  3241.   {$EXTERNALSYM c_dfDIJoystick2}
  3242. {$ENDIF} (* DIRECTINPUT_VERSION >= 0x0500 *)
  3243.  
  3244.  
  3245.  
  3246. (****************************************************************************
  3247.  *
  3248.  *  IDirectInput
  3249.  *
  3250.  ****************************************************************************)
  3251.  
  3252. const
  3253.   DIENUM_STOP             = BOOL(0);
  3254.   {$EXTERNALSYM DIENUM_STOP}
  3255.   DIENUM_CONTINUE         = BOOL(1);
  3256.   {$EXTERNALSYM DIENUM_CONTINUE}
  3257.  
  3258. type
  3259.   TDIEnumDevicesCallbackA = function (var lpddi: TDIDeviceInstanceA; pvRef: Pointer): BOOL; stdcall;
  3260.   {$EXTERNALSYM TDIEnumDevicesCallbackA}
  3261.   TDIEnumDevicesCallbackW = function (var lpddi: TDIDeviceInstanceW; pvRef: Pointer): BOOL; stdcall;
  3262.   {$EXTERNALSYM TDIEnumDevicesCallbackW}
  3263.   TDIEnumDevicesCallback = TDIEnumDevicesCallbackA;
  3264.   {$EXTERNALSYM TDIEnumDevicesCallback}
  3265.   TDIConfigureDevicesCallback = function (lpDDSTarget: IUnknown; pvRef: Pointer): BOOL; stdcall;
  3266.  
  3267. const
  3268.   DIEDFL_ALLDEVICES       = $00000000;
  3269.   {$EXTERNALSYM DIEDFL_ALLDEVICES}
  3270.   DIEDFL_ATTACHEDONLY     = $00000001;
  3271.   {$EXTERNALSYM DIEDFL_ATTACHEDONLY}
  3272. {$IFDEF DIRECTINPUT_VERSION_5} (* #if(DIRECTINPUT_VERSION >= 0x0500) *)
  3273.   DIEDFL_FORCEFEEDBACK    = $00000100;
  3274.   {$EXTERNALSYM DIEDFL_FORCEFEEDBACK}
  3275. {$ENDIF} (* DIRECTINPUT_VERSION >= 0x0500 *)
  3276. {$IFDEF DIRECTINPUT_VERSION_5b} (* #if(DIRECTINPUT_VERSION >= 0x050a) *)
  3277.   DIEDFL_INCLUDEALIASES   = $00010000;
  3278.   {$EXTERNALSYM DIEDFL_INCLUDEALIASES}
  3279.   DIEDFL_INCLUDEPHANTOMS  = $00020000;
  3280.   {$EXTERNALSYM DIEDFL_INCLUDEPHANTOMS}
  3281. {$ENDIF} (* DIRECTINPUT_VERSION >= 0x050a *)
  3282. {$IFDEF DIRECTINPUT_VERSION_8} (* #if(DIRECTINPUT_VERSION >= 0x0800) *)
  3283.   DIEDFL_INCLUDEHIDDEN    = $00040000;
  3284.   {$EXTERNALSYM DIEDFL_INCLUDEHIDDEN}
  3285. {$ENDIF} (* DIRECTINPUT_VERSION >= 0x0800 *)
  3286.  
  3287.  
  3288. {$IFDEF DIRECTINPUT_VERSION_8} (* #if(DIRECTINPUT_VERSION >= 0x0800) *)
  3289. type
  3290.   TDIEnumDevicesBySemanticsCallbackA = function (var lpddi: TDIDeviceInstanceA; lpdid: IDirectInputDevice8A; dwFlags, dwRemaining: DWORD; pvRef: Pointer): BOOL; stdcall;
  3291.   {$EXTERNALSYM TDIEnumDevicesBySemanticsCallbackA}
  3292.   TDIEnumDevicesBySemanticsCallbackW = function (var lpddi: TDIDeviceInstanceW; lpdid: IDirectInputDevice8W; dwFlags, dwRemaining: DWORD; pvRef: Pointer): BOOL; stdcall;
  3293.   {$EXTERNALSYM TDIEnumDevicesBySemanticsCallbackW}
  3294.   TDIEnumDevicesBySemanticsCallback = TDIEnumDevicesBySemanticsCallbackA;
  3295.   {$EXTERNALSYM TDIEnumDevicesBySemanticsCallback}
  3296. {$ENDIF} (* DIRECTINPUT_VERSION >= 0x0800 *)
  3297.  
  3298. {$IFDEF DIRECTINPUT_VERSION_8} (* #if(DIRECTINPUT_VERSION >= 0x0800) *)
  3299. const
  3300.   DIEDBS_MAPPEDPRI1         = $00000001;
  3301.   {$EXTERNALSYM DIEDBS_MAPPEDPRI1}
  3302.   DIEDBS_MAPPEDPRI2         = $00000002;
  3303.   {$EXTERNALSYM DIEDBS_MAPPEDPRI2}
  3304.   DIEDBS_RECENTDEVICE       = $00000010;
  3305.   {$EXTERNALSYM DIEDBS_RECENTDEVICE}
  3306.   DIEDBS_NEWDEVICE          = $00000020;
  3307.   {$EXTERNALSYM DIEDBS_NEWDEVICE}
  3308.  
  3309.   DIEDBSFL_ATTACHEDONLY       = $00000000;
  3310.   {$EXTERNALSYM DIEDBSFL_ATTACHEDONLY}
  3311.   DIEDBSFL_THISUSER           = $00000010;
  3312.   {$EXTERNALSYM DIEDBSFL_THISUSER}
  3313.   DIEDBSFL_FORCEFEEDBACK      = DIEDFL_FORCEFEEDBACK;
  3314.   {$EXTERNALSYM DIEDBSFL_FORCEFEEDBACK}
  3315.   DIEDBSFL_AVAILABLEDEVICES   = $00001000;
  3316.   {$EXTERNALSYM DIEDBSFL_AVAILABLEDEVICES}
  3317.   DIEDBSFL_MULTIMICEKEYBOARDS = $00002000;
  3318.   {$EXTERNALSYM DIEDBSFL_MULTIMICEKEYBOARDS}
  3319.   DIEDBSFL_NONGAMINGDEVICES   = $00004000;
  3320.   {$EXTERNALSYM DIEDBSFL_NONGAMINGDEVICES}
  3321.   DIEDBSFL_VALID              = $00007110;
  3322.   {$EXTERNALSYM DIEDBSFL_VALID}
  3323. {$ENDIF} (* DIRECTINPUT_VERSION >= 0x0800 *)
  3324.  
  3325. type
  3326.   {$EXTERNALSYM IDirectInputA}
  3327.   IDirectInputA = interface(IUnknown)
  3328.     [SID_IDirectInputA]
  3329.     (*** IDirectInputA methods ***)
  3330.     function CreateDevice(const rguid: TGUID; out lplpDirectInputDevice: IDirectInputDeviceA; pUnkOuter: IUnknown): HResult; stdcall;
  3331.     function EnumDevices(dwDevType: DWORD; lpCallback: TDIEnumDevicesCallbackA; pvRef: Pointer; dwFlags: DWORD): HResult; stdcall;
  3332.     function GetDeviceStatus(const rguidInstance: TGUID): HResult; stdcall;
  3333.     function RunControlPanel(hwndOwner: HWND; dwFlags: DWORD): HResult; stdcall;
  3334.     function Initialize(hinst: THandle; dwVersion: DWORD): HResult; stdcall;
  3335.   end;
  3336.  
  3337.   {$EXTERNALSYM IDirectInputW}
  3338.   IDirectInputW = interface(IUnknown)
  3339.     [SID_IDirectInputW]
  3340.     (*** IDirectInputW methods ***)
  3341.     function CreateDevice(const rguid: TGUID; out lplpDirectInputDevice: IDirectInputDeviceW; pUnkOuter: IUnknown): HResult; stdcall;
  3342.     function EnumDevices(dwDevType: DWORD; lpCallback: TDIEnumDevicesCallbackW; pvRef: Pointer; dwFlags: DWORD): HResult; stdcall;
  3343.     function GetDeviceStatus(const rguidInstance: TGUID): HResult; stdcall;
  3344.     function RunControlPanel(hwndOwner: HWND; dwFlags: DWORD): HResult; stdcall;
  3345.     function Initialize(hinst: THandle; dwVersion: DWORD): HResult; stdcall;
  3346.   end;
  3347.  
  3348.   {$EXTERNALSYM IDirectInput}
  3349.   IDirectInput = IDirectInputA;
  3350. type
  3351.   IID_IDirectInput = IDirectInput;
  3352.   {$EXTERNALSYM IID_IDirectInput}
  3353.  
  3354. type
  3355.   {$EXTERNALSYM IDirectInput2A}
  3356.   IDirectInput2A = interface(IDirectInputA)
  3357.     [SID_IDirectInput2A]
  3358.     (*** IDirectInput2A methods ***)
  3359.     function FindDevice(const rguidClass: TGUID; ptszName: PAnsiChar; out pguidInstance: TGUID): HResult; stdcall;
  3360.   end;
  3361.  
  3362.   {$EXTERNALSYM IDirectInput2W}
  3363.   IDirectInput2W = interface(IDirectInputW)
  3364.     [SID_IDirectInput2W]
  3365.     (*** IDirectInput2W methods ***)
  3366.     function FindDevice(const rguidClass: TGUID; ptszName: PWideChar; out pguidInstance: TGUID): HResult; stdcall;
  3367.   end;
  3368.  
  3369.   {$EXTERNALSYM IDirectInput2}
  3370.   IDirectInput2 = IDirectInput2A;
  3371. type
  3372.   IID_IDirectInput2 = IDirectInput2;
  3373.   {$EXTERNALSYM IID_IDirectInput2}
  3374.  
  3375. type
  3376.   {$EXTERNALSYM IDirectInput7A}
  3377.   IDirectInput7A = interface(IDirectInput2A)
  3378.     [SID_IDirectInput7A]
  3379.     (*** IDirectInput7A methods ***)
  3380.     function CreateDeviceEx(const rguid, riid: TGUID; out pvOut: Pointer; pUnkOuter: IUnknown) : HResult; stdcall;
  3381.   end;
  3382.  
  3383.   {$EXTERNALSYM IDirectInput7W}
  3384.   IDirectInput7W = interface(IDirectInput2W)
  3385.     [SID_IDirectInput7W]
  3386.     (*** IDirectInput7W methods ***)
  3387.     function CreateDeviceEx(const rguid, riid: TGUID; out pvOut: Pointer; pUnkOuter: IUnknown) : HResult; stdcall;
  3388.   end;
  3389.  
  3390.   {$EXTERNALSYM IDirectInput7}
  3391.   IDirectInput7 = IDirectInput7A;
  3392. type
  3393.   IID_IDirectInput7 = IDirectInput7;
  3394.   {$EXTERNALSYM IID_IDirectInput7}
  3395.  
  3396. {$IFDEF DIRECTINPUT_VERSION_8} (* #if(DIRECTINPUT_VERSION >= 0x0800) *)
  3397. type
  3398.   {$EXTERNALSYM IDirectInput8A}
  3399.   IDirectInput8A = interface(IUnknown)
  3400.     [SID_IDirectInput8A]
  3401.     (*** IDirectInput8A methods ***)
  3402.     function CreateDevice(const rguid: TGUID; out lplpDirectInputDevice: IDirectInputDevice8A; pUnkOuter: IUnknown): HResult; stdcall;
  3403.     function EnumDevices(dwDevType: DWORD; lpCallback: TDIEnumDevicesCallbackA; pvRef: Pointer; dwFlags: DWORD): HResult; stdcall;
  3404.     function GetDeviceStatus(const rguidInstance: TGUID): HResult; stdcall;
  3405.     function RunControlPanel(hwndOwner: HWND; dwFlags: DWORD): HResult; stdcall;
  3406.     function Initialize(hinst: THandle; dwVersion: DWORD): HResult; stdcall;
  3407.     function FindDevice(const rguidClass: TGUID; ptszName: PAnsiChar; out pguidInstance: TGUID): HResult; stdcall;
  3408.     function EnumDevicesBySemantics(ptszUserName: PAnsiChar; lpdiActionFormat: TDIActionFormatA; lpCallback: TDIEnumDevicesBySemanticsCallbackA; pvRef: Pointer; dwFlags: DWORD): HResult; stdcall;
  3409.     function ConfigureDevices(lpdiCallback: TDIConfigureDevicesCallback; lpdiCDParams: TDIConfigureDevicesParamsA; dwFlags: DWORD; pvRefData: Pointer): HResult; stdcall;
  3410.   end;
  3411.  
  3412.   {$EXTERNALSYM IDirectInput8W}
  3413.   IDirectInput8W = interface(IUnknown)
  3414.     [SID_IDirectInput8W]
  3415.     (*** IDirectInput8W methods ***)
  3416.     function CreateDevice(const rguid: TGUID; out lplpDirectInputDevice: IDirectInputDevice8W; pUnkOuter: IUnknown): HResult; stdcall;
  3417.     function EnumDevices(dwDevType: DWORD; lpCallback: TDIEnumDevicesCallbackW; pvRef: Pointer; dwFlags: DWORD): HResult; stdcall;
  3418.     function GetDeviceStatus(const rguidInstance: TGUID): HResult; stdcall;
  3419.     function RunControlPanel(hwndOwner: HWND; dwFlags: DWORD): HResult; stdcall;
  3420.     function Initialize(hinst: THandle; dwVersion: DWORD): HResult; stdcall;
  3421.     function FindDevice(const rguidClass: TGUID; ptszName: PWideChar; out pguidInstance: TGUID): HResult; stdcall;
  3422.     function EnumDevicesBySemantics(ptszUserName: PWideChar; lpdiActionFormat: TDIActionFormatW; lpCallback: TDIEnumDevicesBySemanticsCallbackW; pvRef: Pointer; dwFlags: DWORD): HResult; stdcall;
  3423.     function ConfigureDevices(lpdiCallback: TDIConfigureDevicesCallback; lpdiCDParams: TDIConfigureDevicesParamsW; dwFlags: DWORD; pvRefData: Pointer): HResult; stdcall;
  3424.   end;
  3425.  
  3426.   {$EXTERNALSYM IDirectInput8}
  3427.   IDirectInput8 = IDirectInput8A;
  3428. type
  3429.   IID_IDirectInput8 = IDirectInput8;
  3430.   {$EXTERNALSYM IID_IDirectInput8}
  3431. {$ENDIF} (* DIRECTINPUT_VERSION >= 0x0800 *)
  3432.  
  3433.  
  3434. const
  3435.   DirectInputDll = 'dinput.dll';
  3436.   DirectInput8Dll = 'dinput8.dll';
  3437.  
  3438. function DirectInputLoaded: Boolean;
  3439. function UnLoadDirectInput: Boolean;
  3440. function LoadDirectInput: Boolean;
  3441.  
  3442. {$IFDEF DIRECTINPUT_DYNAMIC_LINK}
  3443. //{$IFDEF DIRECTINPUT_VERSION_8} (* #if(DIRECTINPUT_VERSION > 0x0700) *)
  3444. var
  3445.   DirectInput8Create: function(hinst: THandle; dwVersion: Cardinal; const riidltf: TGUID; out ppvOut; punkOuter: IUnknown): HResult; stdcall;
  3446.   {$EXTERNALSYM DirectInput8Create}
  3447.  
  3448. //{$ELSE}
  3449.   DirectInputCreateA: function(hinst: THandle; dwVersion: DWORD; out ppDI: IDirectInputA; punkOuter: IUnknown): HResult; stdcall;
  3450.   {$EXTERNALSYM DirectInputCreateA}
  3451.   DirectInputCreateW: function(hinst: THandle; dwVersion: DWORD; out ppDI: IDirectInputW; punkOuter: IUnknown): HResult; stdcall;
  3452.   {$EXTERNALSYM DirectInputCreateW}
  3453.   DirectInputCreate: function(hinst: THandle; dwVersion: DWORD; out ppDI: IDirectInput; punkOuter: IUnknown): HResult; stdcall;
  3454.   {$EXTERNALSYM DirectInputCreate}
  3455.  
  3456.   DirectInputCreateEx: function(hinst : THandle; dwVersion: DWORD; const riidltf: TGUID; out ppvOut; punkOuter: IUnknown): HResult; stdcall;
  3457.   {$EXTERNALSYM DirectInputCreateEx}
  3458.  
  3459. //{$ENDIF} (* DIRECTINPUT_VERSION >= 0x0700 *)
  3460. {$ELSE}
  3461. //{$IFDEF DIRECTINPUT_VERSION_8} (* #if(DIRECTINPUT_VERSION > 0x0700) *)
  3462. function DirectInput8Create(hinst: THandle; dwVersion: DWORD; const riidltf: TGUID; out ppvOut{: Pointer}; punkOuter: IUnknown): HResult; stdcall; external DirectInput8Dll;
  3463. {$EXTERNALSYM DirectInput8Create}
  3464.  
  3465. //{$ELSE}
  3466. function DirectInputCreateA(hinst: THandle; dwVersion: DWORD; out ppDI: IDirectInputA; punkOuter: IUnknown): HResult; stdcall; external DirectInputDll name 'DirectInputCreateA';
  3467. {$EXTERNALSYM DirectInputCreateA}
  3468. function DirectInputCreateW(hinst: THandle; dwVersion: DWORD; out ppDI: IDirectInputW; punkOuter: IUnknown): HResult; stdcall; external DirectInputDll name 'DirectInputCreateW';
  3469. {$EXTERNALSYM DirectInputCreateW}
  3470. function DirectInputCreate(hinst: THandle; dwVersion: DWORD; out ppDI: IDirectInput; punkOuter: IUnknown): HResult; stdcall; external DirectInputDll name 'DirectInputCreateA';
  3471. {$EXTERNALSYM DirectInputCreate}
  3472.  
  3473. function DirectInputCreateEx(hinst: THandle; dwVersion: DWORD; const riidltf: TGUID; out ppvOut{: Pointer}; punkOuter: IUnknown): HResult; stdcall; external DirectInputDll;
  3474. {$EXTERNALSYM DirectInputCreateEx}
  3475.  
  3476. //{$ENDIF} (* DIRECTINPUT_VERSION >= 0x0700 *)
  3477. {$ENDIF}
  3478.  
  3479.  
  3480. (****************************************************************************
  3481.  *
  3482.  *  Return Codes
  3483.  *
  3484.  ****************************************************************************)
  3485.  
  3486. const
  3487. (*
  3488.  *  The operation completed successfully.
  3489.  *)
  3490.   DI_OK                           = S_OK;
  3491.   {$EXTERNALSYM DI_OK}
  3492.  
  3493. (*
  3494.  *  The device exists but is not currently attached.
  3495.  *)
  3496.   DI_NOTATTACHED                  = S_FALSE;
  3497.   {$EXTERNALSYM DI_NOTATTACHED}
  3498.  
  3499. (*
  3500.  *  The device buffer overflowed.  Some input was lost.
  3501.  *)
  3502.   DI_BUFFEROVERFLOW               = S_FALSE;
  3503.   {$EXTERNALSYM DI_BUFFEROVERFLOW}
  3504.  
  3505. (*
  3506.  *  The change in device properties had no effect.
  3507.  *)
  3508.   DI_PROPNOEFFECT                 = S_FALSE;
  3509.   {$EXTERNALSYM DI_PROPNOEFFECT}
  3510.  
  3511. (*
  3512.  *  The operation had no effect.
  3513.  *)
  3514.   DI_NOEFFECT                     = S_FALSE;
  3515.   {$EXTERNALSYM DI_NOEFFECT}
  3516.  
  3517. (*
  3518.  *  The device is a polled device.  As a result, device buffering
  3519.  *  will not collect any data and event notifications will not be
  3520.  *  signalled until GetDeviceState is called.
  3521.  *)
  3522.   DI_POLLEDDEVICE                 = HRESULT($00000002);
  3523.   {$EXTERNALSYM DI_POLLEDDEVICE}
  3524.  
  3525. (*
  3526.  *  The parameters of the effect were successfully updated by
  3527.  *  IDirectInputEffect::SetParameters, but the effect was not
  3528.  *  downloaded because the device is not exclusively acquired
  3529.  *  or because the DIEP_NODOWNLOAD flag was passed.
  3530.  *)
  3531.   DI_DOWNLOADSKIPPED              = HRESULT($00000003);
  3532.   {$EXTERNALSYM DI_DOWNLOADSKIPPED}
  3533.  
  3534. (*
  3535.  *  The parameters of the effect were successfully updated by
  3536.  *  IDirectInputEffect::SetParameters, but in order to change
  3537.  *  the parameters, the effect needed to be restarted.
  3538.  *)
  3539.   DI_EFFECTRESTARTED              = HRESULT($00000004);
  3540.   {$EXTERNALSYM DI_EFFECTRESTARTED}
  3541.  
  3542. (*
  3543.  *  The parameters of the effect were successfully updated by
  3544.  *  IDirectInputEffect::SetParameters, but some of them were
  3545.  *  beyond the capabilities of the device and were truncated.
  3546.  *)
  3547.   DI_TRUNCATED                    = HRESULT($00000008);
  3548.   {$EXTERNALSYM DI_TRUNCATED}
  3549.  
  3550. (*
  3551.  *  The settings have been successfully applied but could not be
  3552.  *  persisted.
  3553.  *)
  3554.   DI_SETTINGSNOTSAVED             = HRESULT($0000000B);
  3555.   {$EXTERNALSYM DI_SETTINGSNOTSAVED}
  3556.  
  3557. (*
  3558.  *  Equal to DI_EFFECTRESTARTED | DI_TRUNCATED.
  3559.  *)
  3560.   DI_TRUNCATEDANDRESTARTED        = HRESULT($0000000C);
  3561.   {$EXTERNALSYM DI_TRUNCATEDANDRESTARTED}
  3562.  
  3563. (*
  3564.  *  A SUCCESS code indicating that settings cannot be modified.
  3565.  *)
  3566.   DI_WRITEPROTECT                 = HRESULT($00000013);
  3567.   {$EXTERNALSYM DI_WRITEPROTECT}
  3568.  
  3569.  
  3570.   SEVERITY_ERROR_FACILITY_WIN32   =
  3571.       HResult(SEVERITY_ERROR shl 31) or HResult(FACILITY_WIN32 shl 16);
  3572.   {$EXTERNALSYM SEVERITY_ERROR_FACILITY_WIN32}
  3573.  
  3574. (*
  3575.  *  The application requires a newer version of DirectInput.
  3576.  *)
  3577.   DIERR_OLDDIRECTINPUTVERSION     = HRESULT(SEVERITY_ERROR_FACILITY_WIN32 or
  3578.                                             ERROR_OLD_WIN_VERSION);
  3579.   {$EXTERNALSYM DIERR_OLDDIRECTINPUTVERSION}
  3580.  
  3581. (*
  3582.  *  The application was written for an unsupported prerelease version
  3583.  *  of DirectInput.
  3584.  *)
  3585.   DIERR_BETADIRECTINPUTVERSION    = HRESULT(SEVERITY_ERROR_FACILITY_WIN32 or
  3586.                                             ERROR_RMODE_APP);
  3587.   {$EXTERNALSYM DIERR_BETADIRECTINPUTVERSION}
  3588.  
  3589. (*
  3590.  *  The object could not be created due to an incompatible driver version
  3591.  *  or mismatched or incomplete driver components.
  3592.  *)
  3593.   DIERR_BADDRIVERVER              = HRESULT(SEVERITY_ERROR_FACILITY_WIN32 or
  3594.                                             ERROR_BAD_DRIVER_LEVEL);
  3595.   {$EXTERNALSYM DIERR_BADDRIVERVER}
  3596.  
  3597. (*
  3598.  * The device or device instance or effect is not registered with DirectInput.
  3599.  *)
  3600.   DIERR_DEVICENOTREG              = REGDB_E_CLASSNOTREG;
  3601.   {$EXTERNALSYM DIERR_DEVICENOTREG}
  3602.  
  3603. (*
  3604.  * The requested object does not exist.
  3605.  *)
  3606.   DIERR_NOTFOUND                  = HRESULT(SEVERITY_ERROR_FACILITY_WIN32 or
  3607.                                             ERROR_FILE_NOT_FOUND);
  3608.   {$EXTERNALSYM DIERR_NOTFOUND}
  3609.  
  3610. (*
  3611.  * The requested object does not exist.
  3612.  *)
  3613.   DIERR_OBJECTNOTFOUND            = HRESULT(SEVERITY_ERROR_FACILITY_WIN32 or
  3614.                                             ERROR_FILE_NOT_FOUND);
  3615.   {$EXTERNALSYM DIERR_OBJECTNOTFOUND}
  3616.  
  3617. (*
  3618.  * An invalid parameter was passed to the returning function,
  3619.  * or the object was not in a state that admitted the function
  3620.  * to be called.
  3621.  *)
  3622.   DIERR_INVALIDPARAM              = E_INVALIDARG;
  3623.   {$EXTERNALSYM DIERR_INVALIDPARAM}
  3624.  
  3625. (*
  3626.  * The specified interface is not supported by the object
  3627.  *)
  3628.   DIERR_NOINTERFACE               = E_NOINTERFACE;
  3629.   {$EXTERNALSYM DIERR_NOINTERFACE}
  3630.  
  3631. (*
  3632.  * An undetermined error occured inside the DInput subsystem
  3633.  *)
  3634.   DIERR_GENERIC                   = E_FAIL;
  3635.   {$EXTERNALSYM DIERR_GENERIC}
  3636.  
  3637. (*
  3638.  * The DInput subsystem couldn't allocate sufficient memory to complete the
  3639.  * caller's request.
  3640.  *)
  3641.   DIERR_OUTOFMEMORY               = E_OUTOFMEMORY;
  3642.   {$EXTERNALSYM DIERR_OUTOFMEMORY}
  3643.  
  3644. (*
  3645.  * The function called is not supported at this time
  3646.  *)
  3647.   DIERR_UNSUPPORTED               = E_NOTIMPL;
  3648.   {$EXTERNALSYM DIERR_UNSUPPORTED}
  3649.  
  3650. (*
  3651.  * This object has not been initialized
  3652.  *)
  3653.   DIERR_NOTINITIALIZED            = HRESULT(SEVERITY_ERROR_FACILITY_WIN32 or
  3654.                                             ERROR_NOT_READY);
  3655.   {$EXTERNALSYM DIERR_NOTINITIALIZED}
  3656.  
  3657. (*
  3658.  * This object is already initialized
  3659.  *)
  3660.   DIERR_ALREADYINITIALIZED        = HRESULT(SEVERITY_ERROR_FACILITY_WIN32 or
  3661.                                             ERROR_ALREADY_INITIALIZED);
  3662.   {$EXTERNALSYM DIERR_ALREADYINITIALIZED}
  3663.  
  3664. (*
  3665.  * This object does not support aggregation
  3666.  *)
  3667.   DIERR_NOAGGREGATION             = CLASS_E_NOAGGREGATION;
  3668.   {$EXTERNALSYM DIERR_NOAGGREGATION}
  3669.  
  3670. (*
  3671.  * Another app has a higher priority level, preventing this call from
  3672.  * succeeding.
  3673.  *)
  3674.   DIERR_OTHERAPPHASPRIO           = E_ACCESSDENIED;
  3675.   {$EXTERNALSYM DIERR_OTHERAPPHASPRIO}
  3676.  
  3677. (*
  3678.  * Access to the device has been lost.  It must be re-acquired.
  3679.  *)
  3680.   DIERR_INPUTLOST                 = HRESULT(SEVERITY_ERROR_FACILITY_WIN32 or
  3681.                                             ERROR_READ_FAULT);
  3682.   {$EXTERNALSYM DIERR_INPUTLOST}
  3683.  
  3684. (*
  3685.  * The operation cannot be performed while the device is acquired.
  3686.  *)
  3687.   DIERR_ACQUIRED                  = HRESULT(SEVERITY_ERROR_FACILITY_WIN32 or
  3688.                                             ERROR_BUSY);
  3689.   {$EXTERNALSYM DIERR_ACQUIRED}
  3690.  
  3691. (*
  3692.  * The operation cannot be performed unless the device is acquired.
  3693.  *)
  3694.   DIERR_NOTACQUIRED               = HRESULT(SEVERITY_ERROR_FACILITY_WIN32 or
  3695.                                             ERROR_INVALID_ACCESS);
  3696.   {$EXTERNALSYM DIERR_NOTACQUIRED}
  3697.  
  3698. (*
  3699.  * The specified property cannot be changed.
  3700.  *)
  3701.   DIERR_READONLY                  = E_ACCESSDENIED;
  3702.   {$EXTERNALSYM DIERR_READONLY}
  3703.  
  3704. (*
  3705.  * The device already has an event notification associated with it.
  3706.  *)
  3707.   DIERR_HANDLEEXISTS              = E_ACCESSDENIED;
  3708.   {$EXTERNALSYM DIERR_HANDLEEXISTS}
  3709.  
  3710. (*
  3711.  * Data is not yet available.
  3712.  *)
  3713.   E_PENDING                       = $8000000A;
  3714.   {$EXTERNALSYM E_PENDING}
  3715.  
  3716. (*
  3717.  * Unable to IDirectInputJoyConfig_Acquire because the user
  3718.  * does not have sufficient privileges to change the joystick
  3719.  * configuration.
  3720.  *)
  3721.   DIERR_INSUFFICIENTPRIVS         = $80040200;
  3722.   {$EXTERNALSYM DIERR_INSUFFICIENTPRIVS}
  3723.  
  3724. (*
  3725.  * The device is full.
  3726.  *)
  3727.   DIERR_DEVICEFULL                = $80040201;
  3728.   {$EXTERNALSYM DIERR_DEVICEFULL}
  3729.  
  3730. (*
  3731.  * Not all the requested information fit into the buffer.
  3732.  *)
  3733.   DIERR_MOREDATA                  = $80040202;
  3734.   {$EXTERNALSYM DIERR_MOREDATA}
  3735.  
  3736. (*
  3737.  * The effect is not downloaded.
  3738.  *)
  3739.   DIERR_NOTDOWNLOADED             = $80040203;
  3740.   {$EXTERNALSYM DIERR_NOTDOWNLOADED}
  3741.  
  3742. (*
  3743.  *  The device cannot be reinitialized because there are still effects
  3744.  *  attached to it.
  3745.  *)
  3746.   DIERR_HASEFFECTS                = $80040204;
  3747.   {$EXTERNALSYM DIERR_HASEFFECTS}
  3748.  
  3749. (*
  3750.  *  The operation cannot be performed unless the device is acquired
  3751.  *  in DISCL_EXCLUSIVE mode.
  3752.  *)
  3753.   DIERR_NOTEXCLUSIVEACQUIRED      = $80040205;
  3754.   {$EXTERNALSYM DIERR_NOTEXCLUSIVEACQUIRED}
  3755.  
  3756. (*
  3757.  *  The effect could not be downloaded because essential information
  3758.  *  is missing.  For example, no axes have been associated with the
  3759.  *  effect, or no type-specific information has been created.
  3760.  *)
  3761.   DIERR_INCOMPLETEEFFECT          = $80040206;
  3762.   {$EXTERNALSYM DIERR_INCOMPLETEEFFECT}
  3763.  
  3764. (*
  3765.  *  Attempted to read buffered device data from a device that is
  3766.  *  not buffered.
  3767.  *)
  3768.   DIERR_NOTBUFFERED               = $80040207;
  3769.   {$EXTERNALSYM DIERR_NOTBUFFERED}
  3770.  
  3771. (*
  3772.  *  An attempt was made to modify parameters of an effect while it is
  3773.  *  playing.  Not all hardware devices support altering the parameters
  3774.  *  of an effect while it is playing.
  3775.  *)
  3776.   DIERR_EFFECTPLAYING             = $80040208;
  3777.   {$EXTERNALSYM DIERR_EFFECTPLAYING}
  3778.  
  3779. (*
  3780.  *  The operation could not be completed because the device is not
  3781.  *  plugged in.
  3782.  *)
  3783.   DIERR_UNPLUGGED                 = $80040209;
  3784.   {$EXTERNALSYM DIERR_UNPLUGGED}
  3785.  
  3786. (*
  3787.  *  SendDeviceData failed because more information was requested
  3788.  *  to be sent than can be sent to the device.  Some devices have
  3789.  *  restrictions on how much data can be sent to them.  (For example,
  3790.  *  there might be a limit on the number of buttons that can be
  3791.  *  pressed at once.)
  3792.  *)
  3793.   DIERR_REPORTFULL                = $8004020A;
  3794.   {$EXTERNALSYM DIERR_REPORTFULL}
  3795.  
  3796.  
  3797. (*
  3798.  *  A mapper file function failed because reading or writing the user or IHV
  3799.  *  settings file failed.
  3800.  *)
  3801.   DIERR_MAPFILEFAIL               = $8004020B;
  3802.   {$EXTERNALSYM DIERR_MAPFILEFAIL}
  3803.  
  3804.  
  3805. (*--- DINPUT Mapper Definitions: New for Dx8         ---*)
  3806.  
  3807.  
  3808. (*--- Keyboard
  3809.       Physical Keyboard Device       ---*)
  3810.  
  3811.   DIKEYBOARD_ESCAPE                       = $81000401;
  3812.   {$EXTERNALSYM DIKEYBOARD_ESCAPE}
  3813.   DIKEYBOARD_1                            = $81000402;
  3814.   {$EXTERNALSYM DIKEYBOARD_1}
  3815.   DIKEYBOARD_2                            = $81000403;
  3816.   {$EXTERNALSYM DIKEYBOARD_2}
  3817.   DIKEYBOARD_3                            = $81000404;
  3818.   {$EXTERNALSYM DIKEYBOARD_3}
  3819.   DIKEYBOARD_4                            = $81000405;
  3820.   {$EXTERNALSYM DIKEYBOARD_4}
  3821.   DIKEYBOARD_5                            = $81000406;
  3822.   {$EXTERNALSYM DIKEYBOARD_5}
  3823.   DIKEYBOARD_6                            = $81000407;
  3824.   {$EXTERNALSYM DIKEYBOARD_6}
  3825.   DIKEYBOARD_7                            = $81000408;
  3826.   {$EXTERNALSYM DIKEYBOARD_7}
  3827.   DIKEYBOARD_8                            = $81000409;
  3828.   {$EXTERNALSYM DIKEYBOARD_8}
  3829.   DIKEYBOARD_9                            = $8100040A;
  3830.   {$EXTERNALSYM DIKEYBOARD_9}
  3831.   DIKEYBOARD_0                            = $8100040B;
  3832.   {$EXTERNALSYM DIKEYBOARD_0}
  3833.   DIKEYBOARD_MINUS                        = $8100040C;    (* - on main keyboard *)
  3834.   {$EXTERNALSYM DIKEYBOARD_MINUS}
  3835.   DIKEYBOARD_EQUALS                       = $8100040D;
  3836.   {$EXTERNALSYM DIKEYBOARD_EQUALS}
  3837.   DIKEYBOARD_BACK                         = $8100040E;    (* backspace *)
  3838.   {$EXTERNALSYM DIKEYBOARD_BACK}
  3839.   DIKEYBOARD_TAB                          = $8100040F;
  3840.   {$EXTERNALSYM DIKEYBOARD_TAB}
  3841.   DIKEYBOARD_Q                            = $81000410;
  3842.   {$EXTERNALSYM DIKEYBOARD_Q}
  3843.   DIKEYBOARD_W                            = $81000411;
  3844.   {$EXTERNALSYM DIKEYBOARD_W}
  3845.   DIKEYBOARD_E                            = $81000412;
  3846.   {$EXTERNALSYM DIKEYBOARD_E}
  3847.   DIKEYBOARD_R                            = $81000413;
  3848.   {$EXTERNALSYM DIKEYBOARD_R}
  3849.   DIKEYBOARD_T                            = $81000414;
  3850.   {$EXTERNALSYM DIKEYBOARD_T}
  3851.   DIKEYBOARD_Y                            = $81000415;
  3852.   {$EXTERNALSYM DIKEYBOARD_Y}
  3853.   DIKEYBOARD_U                            = $81000416;
  3854.   {$EXTERNALSYM DIKEYBOARD_U}
  3855.   DIKEYBOARD_I                            = $81000417;
  3856.   {$EXTERNALSYM DIKEYBOARD_I}
  3857.   DIKEYBOARD_O                            = $81000418;
  3858.   {$EXTERNALSYM DIKEYBOARD_O}
  3859.   DIKEYBOARD_P                            = $81000419;
  3860.   {$EXTERNALSYM DIKEYBOARD_P}
  3861.   DIKEYBOARD_LBRACKET                     = $8100041A;
  3862.   {$EXTERNALSYM DIKEYBOARD_LBRACKET}
  3863.   DIKEYBOARD_RBRACKET                     = $8100041B;
  3864.   {$EXTERNALSYM DIKEYBOARD_RBRACKET}
  3865.   DIKEYBOARD_RETURN                       = $8100041C;    (* Enter on main keyboard *)
  3866.   {$EXTERNALSYM DIKEYBOARD_RETURN}
  3867.   DIKEYBOARD_LCONTROL                     = $8100041D;
  3868.   {$EXTERNALSYM DIKEYBOARD_LCONTROL}
  3869.   DIKEYBOARD_A                            = $8100041E;
  3870.   {$EXTERNALSYM DIKEYBOARD_A}
  3871.   DIKEYBOARD_S                            = $8100041F;
  3872.   {$EXTERNALSYM DIKEYBOARD_S}
  3873.   DIKEYBOARD_D                            = $81000420;
  3874.   {$EXTERNALSYM DIKEYBOARD_D}
  3875.   DIKEYBOARD_F                            = $81000421;
  3876.   {$EXTERNALSYM DIKEYBOARD_F}
  3877.   DIKEYBOARD_G                            = $81000422;
  3878.   {$EXTERNALSYM DIKEYBOARD_G}
  3879.   DIKEYBOARD_H                            = $81000423;
  3880.   {$EXTERNALSYM DIKEYBOARD_H}
  3881.   DIKEYBOARD_J                            = $81000424;
  3882.   {$EXTERNALSYM DIKEYBOARD_J}
  3883.   DIKEYBOARD_K                            = $81000425;
  3884.   {$EXTERNALSYM DIKEYBOARD_K}
  3885.   DIKEYBOARD_L                            = $81000426;
  3886.   {$EXTERNALSYM DIKEYBOARD_L}
  3887.   DIKEYBOARD_SEMICOLON                    = $81000427;
  3888.   {$EXTERNALSYM DIKEYBOARD_SEMICOLON}
  3889.   DIKEYBOARD_APOSTROPHE                   = $81000428;
  3890.   {$EXTERNALSYM DIKEYBOARD_APOSTROPHE}
  3891.   DIKEYBOARD_GRAVE                        = $81000429;    (* accent grave *)
  3892.   {$EXTERNALSYM DIKEYBOARD_GRAVE}
  3893.   DIKEYBOARD_LSHIFT                       = $8100042A;
  3894.   {$EXTERNALSYM DIKEYBOARD_LSHIFT}
  3895.   DIKEYBOARD_BACKSLASH                    = $8100042B;
  3896.   {$EXTERNALSYM DIKEYBOARD_BACKSLASH}
  3897.   DIKEYBOARD_Z                            = $8100042C;
  3898.   {$EXTERNALSYM DIKEYBOARD_Z}
  3899.   DIKEYBOARD_X                            = $8100042D;
  3900.   {$EXTERNALSYM DIKEYBOARD_X}
  3901.   DIKEYBOARD_C                            = $8100042E;
  3902.   {$EXTERNALSYM DIKEYBOARD_C}
  3903.   DIKEYBOARD_V                            = $8100042F;
  3904.   {$EXTERNALSYM DIKEYBOARD_V}
  3905.   DIKEYBOARD_B                            = $81000430;
  3906.   {$EXTERNALSYM DIKEYBOARD_B}
  3907.   DIKEYBOARD_N                            = $81000431;
  3908.   {$EXTERNALSYM DIKEYBOARD_N}
  3909.   DIKEYBOARD_M                            = $81000432;
  3910.   {$EXTERNALSYM DIKEYBOARD_M}
  3911.   DIKEYBOARD_COMMA                        = $81000433;
  3912.   {$EXTERNALSYM DIKEYBOARD_COMMA}
  3913.   DIKEYBOARD_PERIOD                       = $81000434;    (* . on main keyboard *)
  3914.   {$EXTERNALSYM DIKEYBOARD_PERIOD}
  3915.   DIKEYBOARD_SLASH                        = $81000435;    (* / on main keyboard *)
  3916.   {$EXTERNALSYM DIKEYBOARD_SLASH}
  3917.   DIKEYBOARD_RSHIFT                       = $81000436;
  3918.   {$EXTERNALSYM DIKEYBOARD_RSHIFT}
  3919.   DIKEYBOARD_MULTIPLY                     = $81000437;    (* * on numeric keypad *)
  3920.   {$EXTERNALSYM DIKEYBOARD_MULTIPLY}
  3921.   DIKEYBOARD_LMENU                        = $81000438;    (* left Alt *)
  3922.   {$EXTERNALSYM DIKEYBOARD_LMENU}
  3923.   DIKEYBOARD_SPACE                        = $81000439;
  3924.   {$EXTERNALSYM DIKEYBOARD_SPACE}
  3925.   DIKEYBOARD_CAPITAL                      = $8100043A;
  3926.   {$EXTERNALSYM DIKEYBOARD_CAPITAL}
  3927.   DIKEYBOARD_F1                           = $8100043B;
  3928.   {$EXTERNALSYM DIKEYBOARD_F1}
  3929.   DIKEYBOARD_F2                           = $8100043C;
  3930.   {$EXTERNALSYM DIKEYBOARD_F2}
  3931.   DIKEYBOARD_F3                           = $8100043D;
  3932.   {$EXTERNALSYM DIKEYBOARD_F3}
  3933.   DIKEYBOARD_F4                           = $8100043E;
  3934.   {$EXTERNALSYM DIKEYBOARD_F4}
  3935.   DIKEYBOARD_F5                           = $8100043F;
  3936.   {$EXTERNALSYM DIKEYBOARD_F5}
  3937.   DIKEYBOARD_F6                           = $81000440;
  3938.   {$EXTERNALSYM DIKEYBOARD_F6}
  3939.   DIKEYBOARD_F7                           = $81000441;
  3940.   {$EXTERNALSYM DIKEYBOARD_F7}
  3941.   DIKEYBOARD_F8                           = $81000442;
  3942.   {$EXTERNALSYM DIKEYBOARD_F8}
  3943.   DIKEYBOARD_F9                           = $81000443;
  3944.   {$EXTERNALSYM DIKEYBOARD_F9}
  3945.   DIKEYBOARD_F10                          = $81000444;
  3946.   {$EXTERNALSYM DIKEYBOARD_F10}
  3947.   DIKEYBOARD_NUMLOCK                      = $81000445;
  3948.   {$EXTERNALSYM DIKEYBOARD_NUMLOCK}
  3949.   DIKEYBOARD_SCROLL                       = $81000446;    (* Scroll Lock *)
  3950.   {$EXTERNALSYM DIKEYBOARD_SCROLL}
  3951.   DIKEYBOARD_NUMPAD7                      = $81000447;
  3952.   {$EXTERNALSYM DIKEYBOARD_NUMPAD7}
  3953.   DIKEYBOARD_NUMPAD8                      = $81000448;
  3954.   {$EXTERNALSYM DIKEYBOARD_NUMPAD8}
  3955.   DIKEYBOARD_NUMPAD9                      = $81000449;
  3956.   {$EXTERNALSYM DIKEYBOARD_NUMPAD9}
  3957.   DIKEYBOARD_SUBTRACT                     = $8100044A;    (* - on numeric keypad *)
  3958.   {$EXTERNALSYM DIKEYBOARD_SUBTRACT}
  3959.   DIKEYBOARD_NUMPAD4                      = $8100044B;
  3960.   {$EXTERNALSYM DIKEYBOARD_NUMPAD4}
  3961.   DIKEYBOARD_NUMPAD5                      = $8100044C;
  3962.   {$EXTERNALSYM DIKEYBOARD_NUMPAD5}
  3963.   DIKEYBOARD_NUMPAD6                      = $8100044D;
  3964.   {$EXTERNALSYM DIKEYBOARD_NUMPAD6}
  3965.   DIKEYBOARD_ADD                          = $8100044E;    (* + on numeric keypad *)
  3966.   {$EXTERNALSYM DIKEYBOARD_ADD}
  3967.   DIKEYBOARD_NUMPAD1                      = $8100044F;
  3968.   {$EXTERNALSYM DIKEYBOARD_NUMPAD1}
  3969.   DIKEYBOARD_NUMPAD2                      = $81000450;
  3970.   {$EXTERNALSYM DIKEYBOARD_NUMPAD2}
  3971.   DIKEYBOARD_NUMPAD3                      = $81000451;
  3972.   {$EXTERNALSYM DIKEYBOARD_NUMPAD3}
  3973.   DIKEYBOARD_NUMPAD0                      = $81000452;
  3974.   {$EXTERNALSYM DIKEYBOARD_NUMPAD0}
  3975.   DIKEYBOARD_DECIMAL                      = $81000453;    (* . on numeric keypad *)
  3976.   {$EXTERNALSYM DIKEYBOARD_DECIMAL}
  3977.   DIKEYBOARD_OEM_102                      = $81000456;    (* <> or \| on RT 102-key keyboard (Non-U.S.) *)
  3978.   {$EXTERNALSYM DIKEYBOARD_OEM_102}
  3979.   DIKEYBOARD_F11                          = $81000457;
  3980.   {$EXTERNALSYM DIKEYBOARD_F11}
  3981.   DIKEYBOARD_F12                          = $81000458;
  3982.   {$EXTERNALSYM DIKEYBOARD_F12}
  3983.   DIKEYBOARD_F13                          = $81000464;    (*                     (NEC PC98) *)
  3984.   {$EXTERNALSYM DIKEYBOARD_F13}
  3985.   DIKEYBOARD_F14                          = $81000465;    (*                     (NEC PC98) *)
  3986.   {$EXTERNALSYM DIKEYBOARD_F14}
  3987.   DIKEYBOARD_F15                          = $81000466;    (*                     (NEC PC98) *)
  3988.   {$EXTERNALSYM DIKEYBOARD_F15}
  3989.   DIKEYBOARD_KANA                         = $81000470;    (* (Japanese keyboard)            *)
  3990.   {$EXTERNALSYM DIKEYBOARD_KANA}
  3991.   DIKEYBOARD_ABNT_C1                      = $81000473;    (* /? on Brazilian keyboard *)
  3992.   {$EXTERNALSYM DIKEYBOARD_ABNT_C1}
  3993.   DIKEYBOARD_CONVERT                      = $81000479;    (* (Japanese keyboard)            *)
  3994.   {$EXTERNALSYM DIKEYBOARD_CONVERT}
  3995.   DIKEYBOARD_NOCONVERT                    = $8100047B;    (* (Japanese keyboard)            *)
  3996.   {$EXTERNALSYM DIKEYBOARD_NOCONVERT}
  3997.   DIKEYBOARD_YEN                          = $8100047D;    (* (Japanese keyboard)            *)
  3998.   {$EXTERNALSYM DIKEYBOARD_YEN}
  3999.   DIKEYBOARD_ABNT_C2                      = $8100047E;    (* Numpad . on Brazilian keyboard *)
  4000.   {$EXTERNALSYM DIKEYBOARD_ABNT_C2}
  4001.   DIKEYBOARD_NUMPADEQUALS                 = $8100048D;    (* = on numeric keypad (NEC PC98) *)
  4002.   {$EXTERNALSYM DIKEYBOARD_NUMPADEQUALS}
  4003.   DIKEYBOARD_PREVTRACK                    = $81000490;    (* Previous Track (DIK_CIRCUMFLEX on Japanese keyboard) *)
  4004.   {$EXTERNALSYM DIKEYBOARD_PREVTRACK}
  4005.   DIKEYBOARD_AT                           = $81000491;    (*                     (NEC PC98) *)
  4006.   {$EXTERNALSYM DIKEYBOARD_AT}
  4007.   DIKEYBOARD_COLON                        = $81000492;    (*                     (NEC PC98) *)
  4008.   {$EXTERNALSYM DIKEYBOARD_COLON}
  4009.   DIKEYBOARD_UNDERLINE                    = $81000493;    (*                     (NEC PC98) *)
  4010.   {$EXTERNALSYM DIKEYBOARD_UNDERLINE}
  4011.   DIKEYBOARD_KANJI                        = $81000494;    (* (Japanese keyboard)            *)
  4012.   {$EXTERNALSYM DIKEYBOARD_KANJI}
  4013.   DIKEYBOARD_STOP                         = $81000495;    (*                     (NEC PC98) *)
  4014.   {$EXTERNALSYM DIKEYBOARD_STOP}
  4015.   DIKEYBOARD_AX                           = $81000496;    (*                     (Japan AX) *)
  4016.   {$EXTERNALSYM DIKEYBOARD_AX}
  4017.   DIKEYBOARD_UNLABELED                    = $81000497;    (*                        (J3100) *)
  4018.   {$EXTERNALSYM DIKEYBOARD_UNLABELED}
  4019.   DIKEYBOARD_NEXTTRACK                    = $81000499;    (* Next Track *)
  4020.   {$EXTERNALSYM DIKEYBOARD_NEXTTRACK}
  4021.   DIKEYBOARD_NUMPADENTER                  = $8100049C;    (* Enter on numeric keypad *)
  4022.   {$EXTERNALSYM DIKEYBOARD_NUMPADENTER}
  4023.   DIKEYBOARD_RCONTROL                     = $8100049D;
  4024.   {$EXTERNALSYM DIKEYBOARD_RCONTROL}
  4025.   DIKEYBOARD_MUTE                         = $810004A0;    (* Mute *)
  4026.   {$EXTERNALSYM DIKEYBOARD_MUTE}
  4027.   DIKEYBOARD_CALCULATOR                   = $810004A1;    (* Calculator *)
  4028.   {$EXTERNALSYM DIKEYBOARD_CALCULATOR}
  4029.   DIKEYBOARD_PLAYPAUSE                    = $810004A2;    (* Play / Pause *)
  4030.   {$EXTERNALSYM DIKEYBOARD_PLAYPAUSE}
  4031.   DIKEYBOARD_MEDIASTOP                    = $810004A4;    (* Media Stop *)
  4032.   {$EXTERNALSYM DIKEYBOARD_MEDIASTOP}
  4033.   DIKEYBOARD_VOLUMEDOWN                   = $810004AE;    (* Volume - *)
  4034.   {$EXTERNALSYM DIKEYBOARD_VOLUMEDOWN}
  4035.   DIKEYBOARD_VOLUMEUP                     = $810004B0;    (* Volume + *)
  4036.   {$EXTERNALSYM DIKEYBOARD_VOLUMEUP}
  4037.   DIKEYBOARD_WEBHOME                      = $810004B2;    (* Web home *)
  4038.   {$EXTERNALSYM DIKEYBOARD_WEBHOME}
  4039.   DIKEYBOARD_NUMPADCOMMA                  = $810004B3;    (* , on numeric keypad (NEC PC98) *)
  4040.   {$EXTERNALSYM DIKEYBOARD_NUMPADCOMMA}
  4041.   DIKEYBOARD_DIVIDE                       = $810004B5;    (* / on numeric keypad *)
  4042.   {$EXTERNALSYM DIKEYBOARD_DIVIDE}
  4043.   DIKEYBOARD_SYSRQ                        = $810004B7;
  4044.   {$EXTERNALSYM DIKEYBOARD_SYSRQ}
  4045.   DIKEYBOARD_RMENU                        = $810004B8;    (* right Alt *)
  4046.   {$EXTERNALSYM DIKEYBOARD_RMENU}
  4047.   DIKEYBOARD_PAUSE                        = $810004C5;    (* Pause *)
  4048.   {$EXTERNALSYM DIKEYBOARD_PAUSE}
  4049.   DIKEYBOARD_HOME                         = $810004C7;    (* Home on arrow keypad *)
  4050.   {$EXTERNALSYM DIKEYBOARD_HOME}
  4051.   DIKEYBOARD_UP                           = $810004C8;    (* UpArrow on arrow keypad *)
  4052.   {$EXTERNALSYM DIKEYBOARD_UP}
  4053.   DIKEYBOARD_PRIOR                        = $810004C9;    (* PgUp on arrow keypad *)
  4054.   {$EXTERNALSYM DIKEYBOARD_PRIOR}
  4055.   DIKEYBOARD_LEFT                         = $810004CB;    (* LeftArrow on arrow keypad *)
  4056.   {$EXTERNALSYM DIKEYBOARD_LEFT}
  4057.   DIKEYBOARD_RIGHT                        = $810004CD;    (* RightArrow on arrow keypad *)
  4058.   {$EXTERNALSYM DIKEYBOARD_RIGHT}
  4059.   DIKEYBOARD_END                          = $810004CF;    (* End on arrow keypad *)
  4060.   {$EXTERNALSYM DIKEYBOARD_END}
  4061.   DIKEYBOARD_DOWN                         = $810004D0;    (* DownArrow on arrow keypad *)
  4062.   {$EXTERNALSYM DIKEYBOARD_DOWN}
  4063.   DIKEYBOARD_NEXT                         = $810004D1;    (* PgDn on arrow keypad *)
  4064.   {$EXTERNALSYM DIKEYBOARD_NEXT}
  4065.   DIKEYBOARD_INSERT                       = $810004D2;    (* Insert on arrow keypad *)
  4066.   {$EXTERNALSYM DIKEYBOARD_INSERT}
  4067.   DIKEYBOARD_DELETE                       = $810004D3;    (* Delete on arrow keypad *)
  4068.   {$EXTERNALSYM DIKEYBOARD_DELETE}
  4069.   DIKEYBOARD_LWIN                         = $810004DB;    (* Left Windows key *)
  4070.   {$EXTERNALSYM DIKEYBOARD_LWIN}
  4071.   DIKEYBOARD_RWIN                         = $810004DC;    (* Right Windows key *)
  4072.   {$EXTERNALSYM DIKEYBOARD_RWIN}
  4073.   DIKEYBOARD_APPS                         = $810004DD;    (* AppMenu key *)
  4074.   {$EXTERNALSYM DIKEYBOARD_APPS}
  4075.   DIKEYBOARD_POWER                        = $810004DE;    (* System Power *)
  4076.   {$EXTERNALSYM DIKEYBOARD_POWER}
  4077.   DIKEYBOARD_SLEEP                        = $810004DF;    (* System Sleep *)
  4078.   {$EXTERNALSYM DIKEYBOARD_SLEEP}
  4079.   DIKEYBOARD_WAKE                         = $810004E3;    (* System Wake *)
  4080.   {$EXTERNALSYM DIKEYBOARD_WAKE}
  4081.   DIKEYBOARD_WEBSEARCH                    = $810004E5;    (* Web Search *)
  4082.   {$EXTERNALSYM DIKEYBOARD_WEBSEARCH}
  4083.   DIKEYBOARD_WEBFAVORITES                 = $810004E6;    (* Web Favorites *)
  4084.   {$EXTERNALSYM DIKEYBOARD_WEBFAVORITES}
  4085.   DIKEYBOARD_WEBREFRESH                   = $810004E7;    (* Web Refresh *)
  4086.   {$EXTERNALSYM DIKEYBOARD_WEBREFRESH}
  4087.   DIKEYBOARD_WEBSTOP                      = $810004E8;    (* Web Stop *)
  4088.   {$EXTERNALSYM DIKEYBOARD_WEBSTOP}
  4089.   DIKEYBOARD_WEBFORWARD                   = $810004E9;    (* Web Forward *)
  4090.   {$EXTERNALSYM DIKEYBOARD_WEBFORWARD}
  4091.   DIKEYBOARD_WEBBACK                      = $810004EA;    (* Web Back *)
  4092.   {$EXTERNALSYM DIKEYBOARD_WEBBACK}
  4093.   DIKEYBOARD_MYCOMPUTER                   = $810004EB;    (* My Computer *)
  4094.   {$EXTERNALSYM DIKEYBOARD_MYCOMPUTER}
  4095.   DIKEYBOARD_MAIL                         = $810004EC;    (* Mail *)
  4096.   {$EXTERNALSYM DIKEYBOARD_MAIL}
  4097.   DIKEYBOARD_MEDIASELECT                  = $810004ED;    (* Media Select *)
  4098.   {$EXTERNALSYM DIKEYBOARD_MEDIASELECT}
  4099.  
  4100.  
  4101. (*--- MOUSE
  4102.       Physical Mouse Device             ---*)
  4103.  
  4104.   DIMOUSE_XAXISAB                         = ($82000200 or DIMOFS_X); (* X Axis-absolute: Some mice natively report absolute coordinates  *)
  4105.   {$EXTERNALSYM DIMOUSE_XAXISAB}
  4106.   DIMOUSE_YAXISAB                         = ($82000200 or DIMOFS_Y); (* Y Axis-absolute: Some mice natively report absolute coordinates *)
  4107.   {$EXTERNALSYM DIMOUSE_YAXISAB}
  4108.   DIMOUSE_XAXIS                           = ($82000300 or DIMOFS_X); (* X Axis *)
  4109.   {$EXTERNALSYM DIMOUSE_XAXIS}
  4110.   DIMOUSE_YAXIS                           = ($82000300 or DIMOFS_Y); (* Y Axis *)
  4111.   {$EXTERNALSYM DIMOUSE_YAXIS}
  4112.   DIMOUSE_WHEEL                           = ($82000300 or DIMOFS_Z); (* Z Axis *)
  4113.   {$EXTERNALSYM DIMOUSE_WHEEL}
  4114.   DIMOUSE_BUTTON0                         = ($82000400 or DIMOFS_BUTTON0); (* Button 0 *)
  4115.   {$EXTERNALSYM DIMOUSE_BUTTON0}
  4116.   DIMOUSE_BUTTON1                         = ($82000400 or DIMOFS_BUTTON1); (* Button 1 *)
  4117.   {$EXTERNALSYM DIMOUSE_BUTTON1}
  4118.   DIMOUSE_BUTTON2                         = ($82000400 or DIMOFS_BUTTON2); (* Button 2 *)
  4119.   {$EXTERNALSYM DIMOUSE_BUTTON2}
  4120.   DIMOUSE_BUTTON3                         = ($82000400 or DIMOFS_BUTTON3); (* Button 3 *)
  4121.   {$EXTERNALSYM DIMOUSE_BUTTON3}
  4122.   DIMOUSE_BUTTON4                         = ($82000400 or DIMOFS_BUTTON4); (* Button 4 *)
  4123.   {$EXTERNALSYM DIMOUSE_BUTTON4}
  4124.   DIMOUSE_BUTTON5                         = ($82000400 or DIMOFS_BUTTON5); (* Button 5 *)
  4125.   {$EXTERNALSYM DIMOUSE_BUTTON5}
  4126.   DIMOUSE_BUTTON6                         = ($82000400 or DIMOFS_BUTTON6); (* Button 6 *)
  4127.   {$EXTERNALSYM DIMOUSE_BUTTON6}
  4128.   DIMOUSE_BUTTON7                         = ($82000400 or DIMOFS_BUTTON7); (* Button 7 *)
  4129.   {$EXTERNALSYM DIMOUSE_BUTTON7}
  4130.  
  4131.  
  4132. (*--- VOICE
  4133.       Physical Dplay Voice Device       ---*)
  4134.  
  4135.   DIVOICE_CHANNEL1                        = $83000401;
  4136.   {$EXTERNALSYM DIVOICE_CHANNEL1}
  4137.   DIVOICE_CHANNEL2                        = $83000402;
  4138.   {$EXTERNALSYM DIVOICE_CHANNEL2}
  4139.   DIVOICE_CHANNEL3                        = $83000403;
  4140.   {$EXTERNALSYM DIVOICE_CHANNEL3}
  4141.   DIVOICE_CHANNEL4                        = $83000404;
  4142.   {$EXTERNALSYM DIVOICE_CHANNEL4}
  4143.   DIVOICE_CHANNEL5                        = $83000405;
  4144.   {$EXTERNALSYM DIVOICE_CHANNEL5}
  4145.   DIVOICE_CHANNEL6                        = $83000406;
  4146.   {$EXTERNALSYM DIVOICE_CHANNEL6}
  4147.   DIVOICE_CHANNEL7                        = $83000407;
  4148.   {$EXTERNALSYM DIVOICE_CHANNEL7}
  4149.   DIVOICE_CHANNEL8                        = $83000408;
  4150.   {$EXTERNALSYM DIVOICE_CHANNEL8}
  4151.   DIVOICE_TEAM                            = $83000409;
  4152.   {$EXTERNALSYM DIVOICE_TEAM}
  4153.   DIVOICE_ALL                             = $8300040A;
  4154.   {$EXTERNALSYM DIVOICE_ALL}
  4155.   DIVOICE_RECORDMUTE                      = $8300040B;
  4156.   {$EXTERNALSYM DIVOICE_RECORDMUTE}
  4157.   DIVOICE_PLAYBACKMUTE                    = $8300040C;
  4158.   {$EXTERNALSYM DIVOICE_PLAYBACKMUTE}
  4159.   DIVOICE_TRANSMIT                        = $8300040D;
  4160.   {$EXTERNALSYM DIVOICE_TRANSMIT}
  4161.  
  4162.   DIVOICE_VOICECOMMAND                    = $83000410;
  4163.   {$EXTERNALSYM DIVOICE_VOICECOMMAND}
  4164.  
  4165.  
  4166. (*--- Driving Simulator - Racing
  4167.       Vehicle control is primary objective  ---*)
  4168.   DIVIRTUAL_DRIVING_RACE                  = $01000000;
  4169.   {$EXTERNALSYM DIVIRTUAL_DRIVING_RACE}
  4170.   DIAXIS_DRIVINGR_STEER                   = $01008A01; (* Steering *)
  4171.   {$EXTERNALSYM DIAXIS_DRIVINGR_STEER}
  4172.   DIAXIS_DRIVINGR_ACCELERATE              = $01039202; (* Accelerate *)
  4173.   {$EXTERNALSYM DIAXIS_DRIVINGR_ACCELERATE}
  4174.   DIAXIS_DRIVINGR_BRAKE                   = $01041203; (* Brake-Axis *)
  4175.   {$EXTERNALSYM DIAXIS_DRIVINGR_BRAKE}
  4176.   DIBUTTON_DRIVINGR_SHIFTUP               = $01000C01; (* Shift to next higher gear *)
  4177.   {$EXTERNALSYM DIBUTTON_DRIVINGR_SHIFTUP}
  4178.   DIBUTTON_DRIVINGR_SHIFTDOWN             = $01000C02; (* Shift to next lower gear *)
  4179.   {$EXTERNALSYM DIBUTTON_DRIVINGR_SHIFTDOWN}
  4180.   DIBUTTON_DRIVINGR_VIEW                  = $01001C03; (* Cycle through view options *)
  4181.   {$EXTERNALSYM DIBUTTON_DRIVINGR_VIEW}
  4182.   DIBUTTON_DRIVINGR_MENU                  = $010004FD; (* Show menu options *)
  4183.   {$EXTERNALSYM DIBUTTON_DRIVINGR_MENU}
  4184. (*--- Priority 2 controls                            ---*)
  4185.  
  4186.   DIAXIS_DRIVINGR_ACCEL_AND_BRAKE         = $01014A04; (* Some devices combine accelerate and brake in a single axis *)
  4187.   {$EXTERNALSYM DIAXIS_DRIVINGR_ACCEL_AND_BRAKE}
  4188.   DIHATSWITCH_DRIVINGR_GLANCE             = $01004601; (* Look around *)
  4189.   {$EXTERNALSYM DIHATSWITCH_DRIVINGR_GLANCE}
  4190.   DIBUTTON_DRIVINGR_BRAKE                 = $01004C04; (* Brake-button *)
  4191.   {$EXTERNALSYM DIBUTTON_DRIVINGR_BRAKE}
  4192.   DIBUTTON_DRIVINGR_DASHBOARD             = $01004405; (* Select next dashboard option *)
  4193.   {$EXTERNALSYM DIBUTTON_DRIVINGR_DASHBOARD}
  4194.   DIBUTTON_DRIVINGR_AIDS                  = $01004406; (* Driver correction aids *)
  4195.   {$EXTERNALSYM DIBUTTON_DRIVINGR_AIDS}
  4196.   DIBUTTON_DRIVINGR_MAP                   = $01004407; (* Display Driving Map *)
  4197.   {$EXTERNALSYM DIBUTTON_DRIVINGR_MAP}
  4198.   DIBUTTON_DRIVINGR_BOOST                 = $01004408; (* Turbo Boost *)
  4199.   {$EXTERNALSYM DIBUTTON_DRIVINGR_BOOST}
  4200.   DIBUTTON_DRIVINGR_PIT                   = $01004409; (* Pit stop notification *)
  4201.   {$EXTERNALSYM DIBUTTON_DRIVINGR_PIT}
  4202.   DIBUTTON_DRIVINGR_ACCELERATE_LINK       = $0103D4E0; (* Fallback Accelerate button *)
  4203.   {$EXTERNALSYM DIBUTTON_DRIVINGR_ACCELERATE_LINK}
  4204.   DIBUTTON_DRIVINGR_STEER_LEFT_LINK       = $0100CCE4; (* Fallback Steer Left button *)
  4205.   {$EXTERNALSYM DIBUTTON_DRIVINGR_STEER_LEFT_LINK}
  4206.   DIBUTTON_DRIVINGR_STEER_RIGHT_LINK      = $0100CCEC; (* Fallback Steer Right button *)
  4207.   {$EXTERNALSYM DIBUTTON_DRIVINGR_STEER_RIGHT_LINK}
  4208.   DIBUTTON_DRIVINGR_GLANCE_LEFT_LINK      = $0107C4E4; (* Fallback Glance Left button *)
  4209.   {$EXTERNALSYM DIBUTTON_DRIVINGR_GLANCE_LEFT_LINK}
  4210.   DIBUTTON_DRIVINGR_GLANCE_RIGHT_LINK     = $0107C4EC; (* Fallback Glance Right button *)
  4211.   {$EXTERNALSYM DIBUTTON_DRIVINGR_GLANCE_RIGHT_LINK}
  4212.   DIBUTTON_DRIVINGR_DEVICE                = $010044FE; (* Show input device and controls *)
  4213.   {$EXTERNALSYM DIBUTTON_DRIVINGR_DEVICE}
  4214.   DIBUTTON_DRIVINGR_PAUSE                 = $010044FC; (* Start / Pause / Restart game *)
  4215.   {$EXTERNALSYM DIBUTTON_DRIVINGR_PAUSE}
  4216.  
  4217. (*--- Driving Simulator - Combat
  4218.       Combat from within a vehicle is primary objective  ---*)
  4219.   DIVIRTUAL_DRIVING_COMBAT                = $02000000;
  4220.   {$EXTERNALSYM DIVIRTUAL_DRIVING_COMBAT}
  4221.   DIAXIS_DRIVINGC_STEER                   = $02008A01; (* Steering  *)
  4222.   {$EXTERNALSYM DIAXIS_DRIVINGC_STEER}
  4223.   DIAXIS_DRIVINGC_ACCELERATE              = $02039202; (* Accelerate *)
  4224.   {$EXTERNALSYM DIAXIS_DRIVINGC_ACCELERATE}
  4225.   DIAXIS_DRIVINGC_BRAKE                   = $02041203; (* Brake-axis *)
  4226.   {$EXTERNALSYM DIAXIS_DRIVINGC_BRAKE}
  4227.   DIBUTTON_DRIVINGC_FIRE                  = $02000C01; (* Fire *)
  4228.   {$EXTERNALSYM DIBUTTON_DRIVINGC_FIRE}
  4229.   DIBUTTON_DRIVINGC_WEAPONS               = $02000C02; (* Select next weapon *)
  4230.   {$EXTERNALSYM DIBUTTON_DRIVINGC_WEAPONS}
  4231.   DIBUTTON_DRIVINGC_TARGET                = $02000C03; (* Select next available target *)
  4232.   {$EXTERNALSYM DIBUTTON_DRIVINGC_TARGET}
  4233.   DIBUTTON_DRIVINGC_MENU                  = $020004FD; (* Show menu options *)
  4234.   {$EXTERNALSYM DIBUTTON_DRIVINGC_MENU}
  4235. (*--- Priority 2 controls                            ---*)
  4236.  
  4237.   DIAXIS_DRIVINGC_ACCEL_AND_BRAKE         = $02014A04; (* Some devices combine accelerate and brake in a single axis *)
  4238.   {$EXTERNALSYM DIAXIS_DRIVINGC_ACCEL_AND_BRAKE}
  4239.   DIHATSWITCH_DRIVINGC_GLANCE             = $02004601; (* Look around *)
  4240.   {$EXTERNALSYM DIHATSWITCH_DRIVINGC_GLANCE}
  4241.   DIBUTTON_DRIVINGC_SHIFTUP               = $02004C04; (* Shift to next higher gear *)
  4242.   {$EXTERNALSYM DIBUTTON_DRIVINGC_SHIFTUP}
  4243.   DIBUTTON_DRIVINGC_SHIFTDOWN             = $02004C05; (* Shift to next lower gear *)
  4244.   {$EXTERNALSYM DIBUTTON_DRIVINGC_SHIFTDOWN}
  4245.   DIBUTTON_DRIVINGC_DASHBOARD             = $02004406; (* Select next dashboard option *)
  4246.   {$EXTERNALSYM DIBUTTON_DRIVINGC_DASHBOARD}
  4247.   DIBUTTON_DRIVINGC_AIDS                  = $02004407; (* Driver correction aids *)
  4248.   {$EXTERNALSYM DIBUTTON_DRIVINGC_AIDS}
  4249.   DIBUTTON_DRIVINGC_BRAKE                 = $02004C08; (* Brake-button *)
  4250.   {$EXTERNALSYM DIBUTTON_DRIVINGC_BRAKE}
  4251.   DIBUTTON_DRIVINGC_FIRESECONDARY         = $02004C09; (* Alternative fire button *)
  4252.   {$EXTERNALSYM DIBUTTON_DRIVINGC_FIRESECONDARY}
  4253.   DIBUTTON_DRIVINGC_ACCELERATE_LINK       = $0203D4E0; (* Fallback Accelerate button *)
  4254.   {$EXTERNALSYM DIBUTTON_DRIVINGC_ACCELERATE_LINK}
  4255.   DIBUTTON_DRIVINGC_STEER_LEFT_LINK       = $0200CCE4; (* Fallback Steer Left button *)
  4256.   {$EXTERNALSYM DIBUTTON_DRIVINGC_STEER_LEFT_LINK}
  4257.   DIBUTTON_DRIVINGC_STEER_RIGHT_LINK      = $0200CCEC; (* Fallback Steer Right button *)
  4258.   {$EXTERNALSYM DIBUTTON_DRIVINGC_STEER_RIGHT_LINK}
  4259.   DIBUTTON_DRIVINGC_GLANCE_LEFT_LINK      = $0207C4E4; (* Fallback Glance Left button *)
  4260.   {$EXTERNALSYM DIBUTTON_DRIVINGC_GLANCE_LEFT_LINK}
  4261.   DIBUTTON_DRIVINGC_GLANCE_RIGHT_LINK     = $0207C4EC; (* Fallback Glance Right button *)
  4262.   {$EXTERNALSYM DIBUTTON_DRIVINGC_GLANCE_RIGHT_LINK}
  4263.   DIBUTTON_DRIVINGC_DEVICE                = $020044FE; (* Show input device and controls *)
  4264.   {$EXTERNALSYM DIBUTTON_DRIVINGC_DEVICE}
  4265.   DIBUTTON_DRIVINGC_PAUSE                 = $020044FC; (* Start / Pause / Restart game *)
  4266.   {$EXTERNALSYM DIBUTTON_DRIVINGC_PAUSE}
  4267.  
  4268. (*--- Driving Simulator - Tank
  4269.       Combat from withing a tank is primary objective  ---*)
  4270.   DIVIRTUAL_DRIVING_TANK                  = $03000000;
  4271.   {$EXTERNALSYM DIVIRTUAL_DRIVING_TANK}
  4272.   DIAXIS_DRIVINGT_STEER                   = $03008A01; (* Turn tank left / right *)
  4273.   {$EXTERNALSYM DIAXIS_DRIVINGT_STEER}
  4274.   DIAXIS_DRIVINGT_BARREL                  = $03010202; (* Raise / lower barrel *)
  4275.   {$EXTERNALSYM DIAXIS_DRIVINGT_BARREL}
  4276.   DIAXIS_DRIVINGT_ACCELERATE              = $03039203; (* Accelerate *)
  4277.   {$EXTERNALSYM DIAXIS_DRIVINGT_ACCELERATE}
  4278.   DIAXIS_DRIVINGT_ROTATE                  = $03020204; (* Turn barrel left / right *)
  4279.   {$EXTERNALSYM DIAXIS_DRIVINGT_ROTATE}
  4280.   DIBUTTON_DRIVINGT_FIRE                  = $03000C01; (* Fire *)
  4281.   {$EXTERNALSYM DIBUTTON_DRIVINGT_FIRE}
  4282.   DIBUTTON_DRIVINGT_WEAPONS               = $03000C02; (* Select next weapon *)
  4283.   {$EXTERNALSYM DIBUTTON_DRIVINGT_WEAPONS}
  4284.   DIBUTTON_DRIVINGT_TARGET                = $03000C03; (* Selects next available target *)
  4285.   {$EXTERNALSYM DIBUTTON_DRIVINGT_TARGET}
  4286.   DIBUTTON_DRIVINGT_MENU                  = $030004FD; (* Show menu options *)
  4287.   {$EXTERNALSYM DIBUTTON_DRIVINGT_MENU}
  4288. (*--- Priority 2 controls                            ---*)
  4289.  
  4290.   DIHATSWITCH_DRIVINGT_GLANCE             = $03004601; (* Look around *)
  4291.   {$EXTERNALSYM DIHATSWITCH_DRIVINGT_GLANCE}
  4292.   DIAXIS_DRIVINGT_BRAKE                   = $03045205; (* Brake-axis *)
  4293.   {$EXTERNALSYM DIAXIS_DRIVINGT_BRAKE}
  4294.   DIAXIS_DRIVINGT_ACCEL_AND_BRAKE         = $03014A06; (* Some devices combine accelerate and brake in a single axis *)
  4295.   {$EXTERNALSYM DIAXIS_DRIVINGT_ACCEL_AND_BRAKE}
  4296.   DIBUTTON_DRIVINGT_VIEW                  = $03005C04; (* Cycle through view options *)
  4297.   {$EXTERNALSYM DIBUTTON_DRIVINGT_VIEW}
  4298.   DIBUTTON_DRIVINGT_DASHBOARD             = $03005C05; (* Select next dashboard option *)
  4299.   {$EXTERNALSYM DIBUTTON_DRIVINGT_DASHBOARD}
  4300.   DIBUTTON_DRIVINGT_BRAKE                 = $03004C06; (* Brake-button *)
  4301.   {$EXTERNALSYM DIBUTTON_DRIVINGT_BRAKE}
  4302.   DIBUTTON_DRIVINGT_FIRESECONDARY         = $03004C07; (* Alternative fire button *)
  4303.   {$EXTERNALSYM DIBUTTON_DRIVINGT_FIRESECONDARY}
  4304.   DIBUTTON_DRIVINGT_ACCELERATE_LINK       = $0303D4E0; (* Fallback Accelerate button *)
  4305.   {$EXTERNALSYM DIBUTTON_DRIVINGT_ACCELERATE_LINK}
  4306.   DIBUTTON_DRIVINGT_STEER_LEFT_LINK       = $0300CCE4; (* Fallback Steer Left button *)
  4307.   {$EXTERNALSYM DIBUTTON_DRIVINGT_STEER_LEFT_LINK}
  4308.   DIBUTTON_DRIVINGT_STEER_RIGHT_LINK      = $0300CCEC; (* Fallback Steer Right button *)
  4309.   {$EXTERNALSYM DIBUTTON_DRIVINGT_STEER_RIGHT_LINK}
  4310.   DIBUTTON_DRIVINGT_BARREL_UP_LINK        = $030144E0; (* Fallback Barrel up button *)
  4311.   {$EXTERNALSYM DIBUTTON_DRIVINGT_BARREL_UP_LINK}
  4312.   DIBUTTON_DRIVINGT_BARREL_DOWN_LINK      = $030144E8; (* Fallback Barrel down button *)
  4313.   {$EXTERNALSYM DIBUTTON_DRIVINGT_BARREL_DOWN_LINK}
  4314.   DIBUTTON_DRIVINGT_ROTATE_LEFT_LINK      = $030244E4; (* Fallback Rotate left button *)
  4315.   {$EXTERNALSYM DIBUTTON_DRIVINGT_ROTATE_LEFT_LINK}
  4316.   DIBUTTON_DRIVINGT_ROTATE_RIGHT_LINK     = $030244EC; (* Fallback Rotate right button *)
  4317.   {$EXTERNALSYM DIBUTTON_DRIVINGT_ROTATE_RIGHT_LINK}
  4318.   DIBUTTON_DRIVINGT_GLANCE_LEFT_LINK      = $0307C4E4; (* Fallback Glance Left button *)
  4319.   {$EXTERNALSYM DIBUTTON_DRIVINGT_GLANCE_LEFT_LINK}
  4320.   DIBUTTON_DRIVINGT_GLANCE_RIGHT_LINK     = $0307C4EC; (* Fallback Glance Right button *)
  4321.   {$EXTERNALSYM DIBUTTON_DRIVINGT_GLANCE_RIGHT_LINK}
  4322.   DIBUTTON_DRIVINGT_DEVICE                = $030044FE; (* Show input device and controls *)
  4323.   {$EXTERNALSYM DIBUTTON_DRIVINGT_DEVICE}
  4324.   DIBUTTON_DRIVINGT_PAUSE                 = $030044FC; (* Start / Pause / Restart game *)
  4325.   {$EXTERNALSYM DIBUTTON_DRIVINGT_PAUSE}
  4326.  
  4327. (*--- Flight Simulator - Civilian
  4328.       Plane control is the primary objective  ---*)
  4329.   DIVIRTUAL_FLYING_CIVILIAN               = $04000000;
  4330.   {$EXTERNALSYM DIVIRTUAL_FLYING_CIVILIAN}
  4331.   DIAXIS_FLYINGC_BANK                     = $04008A01; (* Roll ship left / right *)
  4332.   {$EXTERNALSYM DIAXIS_FLYINGC_BANK}
  4333.   DIAXIS_FLYINGC_PITCH                    = $04010A02; (* Nose up / down *)
  4334.   {$EXTERNALSYM DIAXIS_FLYINGC_PITCH}
  4335.   DIAXIS_FLYINGC_THROTTLE                 = $04039203; (* Throttle *)
  4336.   {$EXTERNALSYM DIAXIS_FLYINGC_THROTTLE}
  4337.   DIBUTTON_FLYINGC_VIEW                   = $04002401; (* Cycle through view options *)
  4338.   {$EXTERNALSYM DIBUTTON_FLYINGC_VIEW}
  4339.   DIBUTTON_FLYINGC_DISPLAY                = $04002402; (* Select next dashboard / heads up display option *)
  4340.   {$EXTERNALSYM DIBUTTON_FLYINGC_DISPLAY}
  4341.   DIBUTTON_FLYINGC_GEAR                   = $04002C03; (* Gear up / down *)
  4342.   {$EXTERNALSYM DIBUTTON_FLYINGC_GEAR}
  4343.   DIBUTTON_FLYINGC_MENU                   = $040004FD; (* Show menu options *)
  4344.   {$EXTERNALSYM DIBUTTON_FLYINGC_MENU}
  4345. (*--- Priority 2 controls                            ---*)
  4346.  
  4347.   DIHATSWITCH_FLYINGC_GLANCE              = $04004601; (* Look around *)
  4348.   {$EXTERNALSYM DIHATSWITCH_FLYINGC_GLANCE}
  4349.   DIAXIS_FLYINGC_BRAKE                    = $04046A04; (* Apply Brake *)
  4350.   {$EXTERNALSYM DIAXIS_FLYINGC_BRAKE}
  4351.   DIAXIS_FLYINGC_RUDDER                   = $04025205; (* Yaw ship left/right *)
  4352.   {$EXTERNALSYM DIAXIS_FLYINGC_RUDDER}
  4353.   DIAXIS_FLYINGC_FLAPS                    = $04055A06; (* Flaps *)
  4354.   {$EXTERNALSYM DIAXIS_FLYINGC_FLAPS}
  4355.   DIBUTTON_FLYINGC_FLAPSUP                = $04006404; (* Increment stepping up until fully retracted *)
  4356.   {$EXTERNALSYM DIBUTTON_FLYINGC_FLAPSUP}
  4357.   DIBUTTON_FLYINGC_FLAPSDOWN              = $04006405; (* Decrement stepping down until fully extended *)
  4358.   {$EXTERNALSYM DIBUTTON_FLYINGC_FLAPSDOWN}
  4359.   DIBUTTON_FLYINGC_BRAKE_LINK             = $04046CE0; (* Fallback brake button *)
  4360.   {$EXTERNALSYM DIBUTTON_FLYINGC_BRAKE_LINK}
  4361.   DIBUTTON_FLYINGC_FASTER_LINK            = $0403D4E0; (* Fallback throttle up button *)
  4362.   {$EXTERNALSYM DIBUTTON_FLYINGC_FASTER_LINK}
  4363.   DIBUTTON_FLYINGC_SLOWER_LINK            = $0403D4E8; (* Fallback throttle down button *)
  4364.   {$EXTERNALSYM DIBUTTON_FLYINGC_SLOWER_LINK}
  4365.   DIBUTTON_FLYINGC_GLANCE_LEFT_LINK       = $0407C4E4; (* Fallback Glance Left button *)
  4366.   {$EXTERNALSYM DIBUTTON_FLYINGC_GLANCE_LEFT_LINK}
  4367.   DIBUTTON_FLYINGC_GLANCE_RIGHT_LINK      = $0407C4EC; (* Fallback Glance Right button *)
  4368.   {$EXTERNALSYM DIBUTTON_FLYINGC_GLANCE_RIGHT_LINK}
  4369.   DIBUTTON_FLYINGC_GLANCE_UP_LINK         = $0407C4E0; (* Fallback Glance Up button *)
  4370.   {$EXTERNALSYM DIBUTTON_FLYINGC_GLANCE_UP_LINK}
  4371.   DIBUTTON_FLYINGC_GLANCE_DOWN_LINK       = $0407C4E8; (* Fallback Glance Down button *)
  4372.   {$EXTERNALSYM DIBUTTON_FLYINGC_GLANCE_DOWN_LINK}
  4373.   DIBUTTON_FLYINGC_DEVICE                 = $040044FE; (* Show input device and controls *)
  4374.   {$EXTERNALSYM DIBUTTON_FLYINGC_DEVICE}
  4375.   DIBUTTON_FLYINGC_PAUSE                  = $040044FC; (* Start / Pause / Restart game *)
  4376.   {$EXTERNALSYM DIBUTTON_FLYINGC_PAUSE}
  4377.  
  4378. (*--- Flight Simulator - Military
  4379.       Aerial combat is the primary objective  ---*)
  4380.   DIVIRTUAL_FLYING_MILITARY               = $05000000;
  4381.   {$EXTERNALSYM DIVIRTUAL_FLYING_MILITARY}
  4382.   DIAXIS_FLYINGM_BANK                     = $05008A01; (* Bank - Roll ship left / right *)
  4383.   {$EXTERNALSYM DIAXIS_FLYINGM_BANK}
  4384.   DIAXIS_FLYINGM_PITCH                    = $05010A02; (* Pitch - Nose up / down *)
  4385.   {$EXTERNALSYM DIAXIS_FLYINGM_PITCH}
  4386.   DIAXIS_FLYINGM_THROTTLE                 = $05039203; (* Throttle - faster / slower *)
  4387.   {$EXTERNALSYM DIAXIS_FLYINGM_THROTTLE}
  4388.   DIBUTTON_FLYINGM_FIRE                   = $05000C01; (* Fire *)
  4389.   {$EXTERNALSYM DIBUTTON_FLYINGM_FIRE}
  4390.   DIBUTTON_FLYINGM_WEAPONS                = $05000C02; (* Select next weapon *)
  4391.   {$EXTERNALSYM DIBUTTON_FLYINGM_WEAPONS}
  4392.   DIBUTTON_FLYINGM_TARGET                 = $05000C03; (* Selects next available target *)
  4393.   {$EXTERNALSYM DIBUTTON_FLYINGM_TARGET}
  4394.   DIBUTTON_FLYINGM_MENU                   = $050004FD; (* Show menu options *)
  4395.   {$EXTERNALSYM DIBUTTON_FLYINGM_MENU}
  4396. (*--- Priority 2 controls                            ---*)
  4397.  
  4398.   DIHATSWITCH_FLYINGM_GLANCE              = $05004601; (* Look around *)
  4399.   {$EXTERNALSYM DIHATSWITCH_FLYINGM_GLANCE}
  4400.   DIBUTTON_FLYINGM_COUNTER                = $05005C04; (* Activate counter measures *)
  4401.   {$EXTERNALSYM DIBUTTON_FLYINGM_COUNTER}
  4402.   DIAXIS_FLYINGM_RUDDER                   = $05024A04; (* Rudder - Yaw ship left/right *)
  4403.   {$EXTERNALSYM DIAXIS_FLYINGM_RUDDER}
  4404.   DIAXIS_FLYINGM_BRAKE                    = $05046205; (* Brake-axis *)
  4405.   {$EXTERNALSYM DIAXIS_FLYINGM_BRAKE}
  4406.   DIBUTTON_FLYINGM_VIEW                   = $05006405; (* Cycle through view options *)
  4407.   {$EXTERNALSYM DIBUTTON_FLYINGM_VIEW}
  4408.   DIBUTTON_FLYINGM_DISPLAY                = $05006406; (* Select next dashboard option *)
  4409.   {$EXTERNALSYM DIBUTTON_FLYINGM_DISPLAY}
  4410.   DIAXIS_FLYINGM_FLAPS                    = $05055206; (* Flaps *)
  4411.   {$EXTERNALSYM DIAXIS_FLYINGM_FLAPS}
  4412.   DIBUTTON_FLYINGM_FLAPSUP                = $05005407; (* Increment stepping up until fully retracted *)
  4413.   {$EXTERNALSYM DIBUTTON_FLYINGM_FLAPSUP}
  4414.   DIBUTTON_FLYINGM_FLAPSDOWN              = $05005408; (* Decrement stepping down until fully extended *)
  4415.   {$EXTERNALSYM DIBUTTON_FLYINGM_FLAPSDOWN}
  4416.   DIBUTTON_FLYINGM_FIRESECONDARY          = $05004C09; (* Alternative fire button *)
  4417.   {$EXTERNALSYM DIBUTTON_FLYINGM_FIRESECONDARY}
  4418.   DIBUTTON_FLYINGM_GEAR                   = $0500640A; (* Gear up / down *)
  4419.   {$EXTERNALSYM DIBUTTON_FLYINGM_GEAR}
  4420.   DIBUTTON_FLYINGM_BRAKE_LINK             = $050464E0; (* Fallback brake button *)
  4421.   {$EXTERNALSYM DIBUTTON_FLYINGM_BRAKE_LINK}
  4422.   DIBUTTON_FLYINGM_FASTER_LINK            = $0503D4E0; (* Fallback throttle up button *)
  4423.   {$EXTERNALSYM DIBUTTON_FLYINGM_FASTER_LINK}
  4424.   DIBUTTON_FLYINGM_SLOWER_LINK            = $0503D4E8; (* Fallback throttle down button *)
  4425.   {$EXTERNALSYM DIBUTTON_FLYINGM_SLOWER_LINK}
  4426.   DIBUTTON_FLYINGM_GLANCE_LEFT_LINK       = $0507C4E4; (* Fallback Glance Left button *)
  4427.   {$EXTERNALSYM DIBUTTON_FLYINGM_GLANCE_LEFT_LINK}
  4428.   DIBUTTON_FLYINGM_GLANCE_RIGHT_LINK      = $0507C4EC; (* Fallback Glance Right button *)
  4429.   {$EXTERNALSYM DIBUTTON_FLYINGM_GLANCE_RIGHT_LINK}
  4430.   DIBUTTON_FLYINGM_GLANCE_UP_LINK         = $0507C4E0; (* Fallback Glance Up button *)
  4431.   {$EXTERNALSYM DIBUTTON_FLYINGM_GLANCE_UP_LINK}
  4432.   DIBUTTON_FLYINGM_GLANCE_DOWN_LINK       = $0507C4E8; (* Fallback Glance Down button *)
  4433.   {$EXTERNALSYM DIBUTTON_FLYINGM_GLANCE_DOWN_LINK}
  4434.   DIBUTTON_FLYINGM_DEVICE                 = $050044FE; (* Show input device and controls *)
  4435.   {$EXTERNALSYM DIBUTTON_FLYINGM_DEVICE}
  4436.   DIBUTTON_FLYINGM_PAUSE                  = $050044FC; (* Start / Pause / Restart game *)
  4437.   {$EXTERNALSYM DIBUTTON_FLYINGM_PAUSE}
  4438.  
  4439. (*--- Flight Simulator - Combat Helicopter
  4440.       Combat from helicopter is primary objective  ---*)
  4441.   DIVIRTUAL_FLYING_HELICOPTER             = $06000000;
  4442.   {$EXTERNALSYM DIVIRTUAL_FLYING_HELICOPTER}
  4443.   DIAXIS_FLYINGH_BANK                     = $06008A01; (* Bank - Roll ship left / right *)
  4444.   {$EXTERNALSYM DIAXIS_FLYINGH_BANK}
  4445.   DIAXIS_FLYINGH_PITCH                    = $06010A02; (* Pitch - Nose up / down *)
  4446.   {$EXTERNALSYM DIAXIS_FLYINGH_PITCH}
  4447.   DIAXIS_FLYINGH_COLLECTIVE               = $06018A03; (* Collective - Blade pitch/power *)
  4448.   {$EXTERNALSYM DIAXIS_FLYINGH_COLLECTIVE}
  4449.   DIBUTTON_FLYINGH_FIRE                   = $06001401; (* Fire *)
  4450.   {$EXTERNALSYM DIBUTTON_FLYINGH_FIRE}
  4451.   DIBUTTON_FLYINGH_WEAPONS                = $06001402; (* Select next weapon *)
  4452.   {$EXTERNALSYM DIBUTTON_FLYINGH_WEAPONS}
  4453.   DIBUTTON_FLYINGH_TARGET                 = $06001403; (* Selects next available target *)
  4454.   {$EXTERNALSYM DIBUTTON_FLYINGH_TARGET}
  4455.   DIBUTTON_FLYINGH_MENU                   = $060004FD; (* Show menu options *)
  4456.   {$EXTERNALSYM DIBUTTON_FLYINGH_MENU}
  4457. (*--- Priority 2 controls                            ---*)
  4458.  
  4459.   DIHATSWITCH_FLYINGH_GLANCE              = $06004601; (* Look around *)
  4460.   {$EXTERNALSYM DIHATSWITCH_FLYINGH_GLANCE}
  4461.   DIAXIS_FLYINGH_TORQUE                   = $06025A04; (* Torque - Rotate ship around left / right axis *)
  4462.   {$EXTERNALSYM DIAXIS_FLYINGH_TORQUE}
  4463.   DIAXIS_FLYINGH_THROTTLE                 = $0603DA05; (* Throttle *)
  4464.   {$EXTERNALSYM DIAXIS_FLYINGH_THROTTLE}
  4465.   DIBUTTON_FLYINGH_COUNTER                = $06005404; (* Activate counter measures *)
  4466.   {$EXTERNALSYM DIBUTTON_FLYINGH_COUNTER}
  4467.   DIBUTTON_FLYINGH_VIEW                   = $06006405; (* Cycle through view options *)
  4468.   {$EXTERNALSYM DIBUTTON_FLYINGH_VIEW}
  4469.   DIBUTTON_FLYINGH_GEAR                   = $06006406; (* Gear up / down *)
  4470.   {$EXTERNALSYM DIBUTTON_FLYINGH_GEAR}
  4471.   DIBUTTON_FLYINGH_FIRESECONDARY          = $06004C07; (* Alternative fire button *)
  4472.   {$EXTERNALSYM DIBUTTON_FLYINGH_FIRESECONDARY}
  4473.   DIBUTTON_FLYINGH_FASTER_LINK            = $0603DCE0; (* Fallback throttle up button *)
  4474.   {$EXTERNALSYM DIBUTTON_FLYINGH_FASTER_LINK}
  4475.   DIBUTTON_FLYINGH_SLOWER_LINK            = $0603DCE8; (* Fallback throttle down button *)
  4476.   {$EXTERNALSYM DIBUTTON_FLYINGH_SLOWER_LINK}
  4477.   DIBUTTON_FLYINGH_GLANCE_LEFT_LINK       = $0607C4E4; (* Fallback Glance Left button *)
  4478.   {$EXTERNALSYM DIBUTTON_FLYINGH_GLANCE_LEFT_LINK}
  4479.   DIBUTTON_FLYINGH_GLANCE_RIGHT_LINK      = $0607C4EC; (* Fallback Glance Right button *)
  4480.   {$EXTERNALSYM DIBUTTON_FLYINGH_GLANCE_RIGHT_LINK}
  4481.   DIBUTTON_FLYINGH_GLANCE_UP_LINK         = $0607C4E0; (* Fallback Glance Up button *)
  4482.   {$EXTERNALSYM DIBUTTON_FLYINGH_GLANCE_UP_LINK}
  4483.   DIBUTTON_FLYINGH_GLANCE_DOWN_LINK       = $0607C4E8; (* Fallback Glance Down button *)
  4484.   {$EXTERNALSYM DIBUTTON_FLYINGH_GLANCE_DOWN_LINK}
  4485.   DIBUTTON_FLYINGH_DEVICE                 = $060044FE; (* Show input device and controls *)
  4486.   {$EXTERNALSYM DIBUTTON_FLYINGH_DEVICE}
  4487.   DIBUTTON_FLYINGH_PAUSE                  = $060044FC; (* Start / Pause / Restart game *)
  4488.   {$EXTERNALSYM DIBUTTON_FLYINGH_PAUSE}
  4489.  
  4490. (*--- Space Simulator - Combat
  4491.       Space Simulator with weapons  ---*)
  4492.   DIVIRTUAL_SPACESIM                      = $07000000;
  4493.   {$EXTERNALSYM DIVIRTUAL_SPACESIM}
  4494.   DIAXIS_SPACESIM_LATERAL                 = $07008201; (* Move ship left / right *)
  4495.   {$EXTERNALSYM DIAXIS_SPACESIM_LATERAL}
  4496.   DIAXIS_SPACESIM_MOVE                    = $07010202; (* Move ship forward/backward *)
  4497.   {$EXTERNALSYM DIAXIS_SPACESIM_MOVE}
  4498.   DIAXIS_SPACESIM_THROTTLE                = $07038203; (* Throttle - Engine speed *)
  4499.   {$EXTERNALSYM DIAXIS_SPACESIM_THROTTLE}
  4500.   DIBUTTON_SPACESIM_FIRE                  = $07000401; (* Fire *)
  4501.   {$EXTERNALSYM DIBUTTON_SPACESIM_FIRE}
  4502.   DIBUTTON_SPACESIM_WEAPONS               = $07000402; (* Select next weapon *)
  4503.   {$EXTERNALSYM DIBUTTON_SPACESIM_WEAPONS}
  4504.   DIBUTTON_SPACESIM_TARGET                = $07000403; (* Selects next available target *)
  4505.   {$EXTERNALSYM DIBUTTON_SPACESIM_TARGET}
  4506.   DIBUTTON_SPACESIM_MENU                  = $070004FD; (* Show menu options *)
  4507.   {$EXTERNALSYM DIBUTTON_SPACESIM_MENU}
  4508. (*--- Priority 2 controls                            ---*)
  4509.  
  4510.   DIHATSWITCH_SPACESIM_GLANCE             = $07004601; (* Look around *)
  4511.   {$EXTERNALSYM DIHATSWITCH_SPACESIM_GLANCE}
  4512.   DIAXIS_SPACESIM_CLIMB                   = $0701C204; (* Climb - Pitch ship up/down *)
  4513.   {$EXTERNALSYM DIAXIS_SPACESIM_CLIMB}
  4514.   DIAXIS_SPACESIM_ROTATE                  = $07024205; (* Rotate - Turn ship left/right *)
  4515.   {$EXTERNALSYM DIAXIS_SPACESIM_ROTATE}
  4516.   DIBUTTON_SPACESIM_VIEW                  = $07004404; (* Cycle through view options *)
  4517.   {$EXTERNALSYM DIBUTTON_SPACESIM_VIEW}
  4518.   DIBUTTON_SPACESIM_DISPLAY               = $07004405; (* Select next dashboard / heads up display option *)
  4519.   {$EXTERNALSYM DIBUTTON_SPACESIM_DISPLAY}
  4520.   DIBUTTON_SPACESIM_RAISE                 = $07004406; (* Raise ship while maintaining current pitch *)
  4521.   {$EXTERNALSYM DIBUTTON_SPACESIM_RAISE}
  4522.   DIBUTTON_SPACESIM_LOWER                 = $07004407; (* Lower ship while maintaining current pitch *)
  4523.   {$EXTERNALSYM DIBUTTON_SPACESIM_LOWER}
  4524.   DIBUTTON_SPACESIM_GEAR                  = $07004408; (* Gear up / down *)
  4525.   {$EXTERNALSYM DIBUTTON_SPACESIM_GEAR}
  4526.   DIBUTTON_SPACESIM_FIRESECONDARY         = $07004409; (* Alternative fire button *)
  4527.   {$EXTERNALSYM DIBUTTON_SPACESIM_FIRESECONDARY}
  4528.   DIBUTTON_SPACESIM_LEFT_LINK             = $0700C4E4; (* Fallback move left button *)
  4529.   {$EXTERNALSYM DIBUTTON_SPACESIM_LEFT_LINK}
  4530.   DIBUTTON_SPACESIM_RIGHT_LINK            = $0700C4EC; (* Fallback move right button *)
  4531.   {$EXTERNALSYM DIBUTTON_SPACESIM_RIGHT_LINK}
  4532.   DIBUTTON_SPACESIM_FORWARD_LINK          = $070144E0; (* Fallback move forward button *)
  4533.   {$EXTERNALSYM DIBUTTON_SPACESIM_FORWARD_LINK}
  4534.   DIBUTTON_SPACESIM_BACKWARD_LINK         = $070144E8; (* Fallback move backwards button *)
  4535.   {$EXTERNALSYM DIBUTTON_SPACESIM_BACKWARD_LINK}
  4536.   DIBUTTON_SPACESIM_FASTER_LINK           = $0703C4E0; (* Fallback throttle up button *)
  4537.   {$EXTERNALSYM DIBUTTON_SPACESIM_FASTER_LINK}
  4538.   DIBUTTON_SPACESIM_SLOWER_LINK           = $0703C4E8; (* Fallback throttle down button *)
  4539.   {$EXTERNALSYM DIBUTTON_SPACESIM_SLOWER_LINK}
  4540.   DIBUTTON_SPACESIM_TURN_LEFT_LINK        = $070244E4; (* Fallback turn left button *)
  4541.   {$EXTERNALSYM DIBUTTON_SPACESIM_TURN_LEFT_LINK}
  4542.   DIBUTTON_SPACESIM_TURN_RIGHT_LINK       = $070244EC; (* Fallback turn right button *)
  4543.   {$EXTERNALSYM DIBUTTON_SPACESIM_TURN_RIGHT_LINK}
  4544.   DIBUTTON_SPACESIM_GLANCE_LEFT_LINK      = $0707C4E4; (* Fallback Glance Left button *)
  4545.   {$EXTERNALSYM DIBUTTON_SPACESIM_GLANCE_LEFT_LINK}
  4546.   DIBUTTON_SPACESIM_GLANCE_RIGHT_LINK     = $0707C4EC; (* Fallback Glance Right button *)
  4547.   {$EXTERNALSYM DIBUTTON_SPACESIM_GLANCE_RIGHT_LINK}
  4548.   DIBUTTON_SPACESIM_GLANCE_UP_LINK        = $0707C4E0; (* Fallback Glance Up button *)
  4549.   {$EXTERNALSYM DIBUTTON_SPACESIM_GLANCE_UP_LINK}
  4550.   DIBUTTON_SPACESIM_GLANCE_DOWN_LINK      = $0707C4E8; (* Fallback Glance Down button *)
  4551.   {$EXTERNALSYM DIBUTTON_SPACESIM_GLANCE_DOWN_LINK}
  4552.   DIBUTTON_SPACESIM_DEVICE                = $070044FE; (* Show input device and controls *)
  4553.   {$EXTERNALSYM DIBUTTON_SPACESIM_DEVICE}
  4554.   DIBUTTON_SPACESIM_PAUSE                 = $070044FC; (* Start / Pause / Restart game *)
  4555.   {$EXTERNALSYM DIBUTTON_SPACESIM_PAUSE}
  4556.  
  4557. (*--- Fighting - First Person
  4558.       Hand to Hand combat is primary objective  ---*)
  4559.   DIVIRTUAL_FIGHTING_HAND2HAND            = $08000000;
  4560.   {$EXTERNALSYM DIVIRTUAL_FIGHTING_HAND2HAND}
  4561.   DIAXIS_FIGHTINGH_LATERAL                = $08008201; (* Sidestep left/right *)
  4562.   {$EXTERNALSYM DIAXIS_FIGHTINGH_LATERAL}
  4563.   DIAXIS_FIGHTINGH_MOVE                   = $08010202; (* Move forward/backward *)
  4564.   {$EXTERNALSYM DIAXIS_FIGHTINGH_MOVE}
  4565.   DIBUTTON_FIGHTINGH_PUNCH                = $08000401; (* Punch *)
  4566.   {$EXTERNALSYM DIBUTTON_FIGHTINGH_PUNCH}
  4567.   DIBUTTON_FIGHTINGH_KICK                 = $08000402; (* Kick *)
  4568.   {$EXTERNALSYM DIBUTTON_FIGHTINGH_KICK}
  4569.   DIBUTTON_FIGHTINGH_BLOCK                = $08000403; (* Block *)
  4570.   {$EXTERNALSYM DIBUTTON_FIGHTINGH_BLOCK}
  4571.   DIBUTTON_FIGHTINGH_CROUCH               = $08000404; (* Crouch *)
  4572.   {$EXTERNALSYM DIBUTTON_FIGHTINGH_CROUCH}
  4573.   DIBUTTON_FIGHTINGH_JUMP                 = $08000405; (* Jump *)
  4574.   {$EXTERNALSYM DIBUTTON_FIGHTINGH_JUMP}
  4575.   DIBUTTON_FIGHTINGH_SPECIAL1             = $08000406; (* Apply first special move *)
  4576.   {$EXTERNALSYM DIBUTTON_FIGHTINGH_SPECIAL1}
  4577.   DIBUTTON_FIGHTINGH_SPECIAL2             = $08000407; (* Apply second special move *)
  4578.   {$EXTERNALSYM DIBUTTON_FIGHTINGH_SPECIAL2}
  4579.   DIBUTTON_FIGHTINGH_MENU                 = $080004FD; (* Show menu options *)
  4580.   {$EXTERNALSYM DIBUTTON_FIGHTINGH_MENU}
  4581. (*--- Priority 2 controls                            ---*)
  4582.  
  4583.   DIBUTTON_FIGHTINGH_SELECT               = $08004408; (* Select special move *)
  4584.   {$EXTERNALSYM DIBUTTON_FIGHTINGH_SELECT}
  4585.   DIHATSWITCH_FIGHTINGH_SLIDE             = $08004601; (* Look around *)
  4586.   {$EXTERNALSYM DIHATSWITCH_FIGHTINGH_SLIDE}
  4587.   DIBUTTON_FIGHTINGH_DISPLAY              = $08004409; (* Shows next on-screen display option *)
  4588.   {$EXTERNALSYM DIBUTTON_FIGHTINGH_DISPLAY}
  4589.   DIAXIS_FIGHTINGH_ROTATE                 = $08024203; (* Rotate - Turn body left/right *)
  4590.   {$EXTERNALSYM DIAXIS_FIGHTINGH_ROTATE}
  4591.   DIBUTTON_FIGHTINGH_DODGE                = $0800440A; (* Dodge *)
  4592.   {$EXTERNALSYM DIBUTTON_FIGHTINGH_DODGE}
  4593.   DIBUTTON_FIGHTINGH_LEFT_LINK            = $0800C4E4; (* Fallback left sidestep button *)
  4594.   {$EXTERNALSYM DIBUTTON_FIGHTINGH_LEFT_LINK}
  4595.   DIBUTTON_FIGHTINGH_RIGHT_LINK           = $0800C4EC; (* Fallback right sidestep button *)
  4596.   {$EXTERNALSYM DIBUTTON_FIGHTINGH_RIGHT_LINK}
  4597.   DIBUTTON_FIGHTINGH_FORWARD_LINK         = $080144E0; (* Fallback forward button *)
  4598.   {$EXTERNALSYM DIBUTTON_FIGHTINGH_FORWARD_LINK}
  4599.   DIBUTTON_FIGHTINGH_BACKWARD_LINK        = $080144E8; (* Fallback backward button *)
  4600.   {$EXTERNALSYM DIBUTTON_FIGHTINGH_BACKWARD_LINK}
  4601.   DIBUTTON_FIGHTINGH_DEVICE               = $080044FE; (* Show input device and controls *)
  4602.   {$EXTERNALSYM DIBUTTON_FIGHTINGH_DEVICE}
  4603.   DIBUTTON_FIGHTINGH_PAUSE                = $080044FC; (* Start / Pause / Restart game *)
  4604.   {$EXTERNALSYM DIBUTTON_FIGHTINGH_PAUSE}
  4605.  
  4606. (*--- Fighting - First Person Shooting
  4607.       Navigation and combat are primary objectives  ---*)
  4608.   DIVIRTUAL_FIGHTING_FPS                  = $09000000;
  4609.   {$EXTERNALSYM DIVIRTUAL_FIGHTING_FPS}
  4610.   DIAXIS_FPS_ROTATE                       = $09008201; (* Rotate character left/right *)
  4611.   {$EXTERNALSYM DIAXIS_FPS_ROTATE}
  4612.   DIAXIS_FPS_MOVE                         = $09010202; (* Move forward/backward *)
  4613.   {$EXTERNALSYM DIAXIS_FPS_MOVE}
  4614.   DIBUTTON_FPS_FIRE                       = $09000401; (* Fire *)
  4615.   {$EXTERNALSYM DIBUTTON_FPS_FIRE}
  4616.   DIBUTTON_FPS_WEAPONS                    = $09000402; (* Select next weapon *)
  4617.   {$EXTERNALSYM DIBUTTON_FPS_WEAPONS}
  4618.   DIBUTTON_FPS_APPLY                      = $09000403; (* Use item *)
  4619.   {$EXTERNALSYM DIBUTTON_FPS_APPLY}
  4620.   DIBUTTON_FPS_SELECT                     = $09000404; (* Select next inventory item *)
  4621.   {$EXTERNALSYM DIBUTTON_FPS_SELECT}
  4622.   DIBUTTON_FPS_CROUCH                     = $09000405; (* Crouch/ climb down/ swim down *)
  4623.   {$EXTERNALSYM DIBUTTON_FPS_CROUCH}
  4624.   DIBUTTON_FPS_JUMP                       = $09000406; (* Jump/ climb up/ swim up *)
  4625.   {$EXTERNALSYM DIBUTTON_FPS_JUMP}
  4626.   DIAXIS_FPS_LOOKUPDOWN                   = $09018203; (* Look up / down  *)
  4627.   {$EXTERNALSYM DIAXIS_FPS_LOOKUPDOWN}
  4628.   DIBUTTON_FPS_STRAFE                     = $09000407; (* Enable strafing while active *)
  4629.   {$EXTERNALSYM DIBUTTON_FPS_STRAFE}
  4630.   DIBUTTON_FPS_MENU                       = $090004FD; (* Show menu options *)
  4631.   {$EXTERNALSYM DIBUTTON_FPS_MENU}
  4632. (*--- Priority 2 controls                            ---*)
  4633.  
  4634.   DIHATSWITCH_FPS_GLANCE                  = $09004601; (* Look around *)
  4635.   {$EXTERNALSYM DIHATSWITCH_FPS_GLANCE}
  4636.   DIBUTTON_FPS_DISPLAY                    = $09004408; (* Shows next on-screen display option/ map *)
  4637.   {$EXTERNALSYM DIBUTTON_FPS_DISPLAY}
  4638.   DIAXIS_FPS_SIDESTEP                     = $09024204; (* Sidestep *)
  4639.   {$EXTERNALSYM DIAXIS_FPS_SIDESTEP}
  4640.   DIBUTTON_FPS_DODGE                      = $09004409; (* Dodge *)
  4641.   {$EXTERNALSYM DIBUTTON_FPS_DODGE}
  4642.   DIBUTTON_FPS_GLANCEL                    = $0900440A; (* Glance Left *)
  4643.   {$EXTERNALSYM DIBUTTON_FPS_GLANCEL}
  4644.   DIBUTTON_FPS_GLANCER                    = $0900440B; (* Glance Right *)
  4645.   {$EXTERNALSYM DIBUTTON_FPS_GLANCER}
  4646.   DIBUTTON_FPS_FIRESECONDARY              = $0900440C; (* Alternative fire button *)
  4647.   {$EXTERNALSYM DIBUTTON_FPS_FIRESECONDARY}
  4648.   DIBUTTON_FPS_ROTATE_LEFT_LINK           = $0900C4E4; (* Fallback rotate left button *)
  4649.   {$EXTERNALSYM DIBUTTON_FPS_ROTATE_LEFT_LINK}
  4650.   DIBUTTON_FPS_ROTATE_RIGHT_LINK          = $0900C4EC; (* Fallback rotate right button *)
  4651.   {$EXTERNALSYM DIBUTTON_FPS_ROTATE_RIGHT_LINK}
  4652.   DIBUTTON_FPS_FORWARD_LINK               = $090144E0; (* Fallback forward button *)
  4653.   {$EXTERNALSYM DIBUTTON_FPS_FORWARD_LINK}
  4654.   DIBUTTON_FPS_BACKWARD_LINK              = $090144E8; (* Fallback backward button *)
  4655.   {$EXTERNALSYM DIBUTTON_FPS_BACKWARD_LINK}
  4656.   DIBUTTON_FPS_GLANCE_UP_LINK             = $0901C4E0; (* Fallback look up button *)
  4657.   {$EXTERNALSYM DIBUTTON_FPS_GLANCE_UP_LINK}
  4658.   DIBUTTON_FPS_GLANCE_DOWN_LINK           = $0901C4E8; (* Fallback look down button *)
  4659.   {$EXTERNALSYM DIBUTTON_FPS_GLANCE_DOWN_LINK}
  4660.   DIBUTTON_FPS_STEP_LEFT_LINK             = $090244E4; (* Fallback step left button *)
  4661.   {$EXTERNALSYM DIBUTTON_FPS_STEP_LEFT_LINK}
  4662.   DIBUTTON_FPS_STEP_RIGHT_LINK            = $090244EC; (* Fallback step right button *)
  4663.   {$EXTERNALSYM DIBUTTON_FPS_STEP_RIGHT_LINK}
  4664.   DIBUTTON_FPS_DEVICE                     = $090044FE; (* Show input device and controls *)
  4665.   {$EXTERNALSYM DIBUTTON_FPS_DEVICE}
  4666.   DIBUTTON_FPS_PAUSE                      = $090044FC; (* Start / Pause / Restart game *)
  4667.   {$EXTERNALSYM DIBUTTON_FPS_PAUSE}
  4668.  
  4669. (*--- Fighting - Third Person action
  4670.       Perspective of camera is behind the main character  ---*)
  4671.   DIVIRTUAL_FIGHTING_THIRDPERSON          = $0A000000;
  4672.   {$EXTERNALSYM DIVIRTUAL_FIGHTING_THIRDPERSON}
  4673.   DIAXIS_TPS_TURN                         = $0A020201; (* Turn left/right *)
  4674.   {$EXTERNALSYM DIAXIS_TPS_TURN}
  4675.   DIAXIS_TPS_MOVE                         = $0A010202; (* Move forward/backward *)
  4676.   {$EXTERNALSYM DIAXIS_TPS_MOVE}
  4677.   DIBUTTON_TPS_RUN                        = $0A000401; (* Run or walk toggle switch *)
  4678.   {$EXTERNALSYM DIBUTTON_TPS_RUN}
  4679.   DIBUTTON_TPS_ACTION                     = $0A000402; (* Action Button *)
  4680.   {$EXTERNALSYM DIBUTTON_TPS_ACTION}
  4681.   DIBUTTON_TPS_SELECT                     = $0A000403; (* Select next weapon *)
  4682.   {$EXTERNALSYM DIBUTTON_TPS_SELECT}
  4683.   DIBUTTON_TPS_USE                        = $0A000404; (* Use inventory item currently selected *)
  4684.   {$EXTERNALSYM DIBUTTON_TPS_USE}
  4685.   DIBUTTON_TPS_JUMP                       = $0A000405; (* Character Jumps *)
  4686.   {$EXTERNALSYM DIBUTTON_TPS_JUMP}
  4687.   DIBUTTON_TPS_MENU                       = $0A0004FD; (* Show menu options *)
  4688.   {$EXTERNALSYM DIBUTTON_TPS_MENU}
  4689. (*--- Priority 2 controls                            ---*)
  4690.  
  4691.   DIHATSWITCH_TPS_GLANCE                  = $0A004601; (* Look around *)
  4692.   {$EXTERNALSYM DIHATSWITCH_TPS_GLANCE}
  4693.   DIBUTTON_TPS_VIEW                       = $0A004406; (* Select camera view *)
  4694.   {$EXTERNALSYM DIBUTTON_TPS_VIEW}
  4695.   DIBUTTON_TPS_STEPLEFT                   = $0A004407; (* Character takes a left step *)
  4696.   {$EXTERNALSYM DIBUTTON_TPS_STEPLEFT}
  4697.   DIBUTTON_TPS_STEPRIGHT                  = $0A004408; (* Character takes a right step *)
  4698.   {$EXTERNALSYM DIBUTTON_TPS_STEPRIGHT}
  4699.   DIAXIS_TPS_STEP                         = $0A00C203; (* Character steps left/right *)
  4700.   {$EXTERNALSYM DIAXIS_TPS_STEP}
  4701.   DIBUTTON_TPS_DODGE                      = $0A004409; (* Character dodges or ducks *)
  4702.   {$EXTERNALSYM DIBUTTON_TPS_DODGE}
  4703.   DIBUTTON_TPS_INVENTORY                  = $0A00440A; (* Cycle through inventory *)
  4704.   {$EXTERNALSYM DIBUTTON_TPS_INVENTORY}
  4705.   DIBUTTON_TPS_TURN_LEFT_LINK             = $0A0244E4; (* Fallback turn left button *)
  4706.   {$EXTERNALSYM DIBUTTON_TPS_TURN_LEFT_LINK}
  4707.   DIBUTTON_TPS_TURN_RIGHT_LINK            = $0A0244EC; (* Fallback turn right button *)
  4708.   {$EXTERNALSYM DIBUTTON_TPS_TURN_RIGHT_LINK}
  4709.   DIBUTTON_TPS_FORWARD_LINK               = $0A0144E0; (* Fallback forward button *)
  4710.   {$EXTERNALSYM DIBUTTON_TPS_FORWARD_LINK}
  4711.   DIBUTTON_TPS_BACKWARD_LINK              = $0A0144E8; (* Fallback backward button *)
  4712.   {$EXTERNALSYM DIBUTTON_TPS_BACKWARD_LINK}
  4713.   DIBUTTON_TPS_GLANCE_UP_LINK             = $0A07C4E0; (* Fallback look up button *)
  4714.   {$EXTERNALSYM DIBUTTON_TPS_GLANCE_UP_LINK}
  4715.   DIBUTTON_TPS_GLANCE_DOWN_LINK           = $0A07C4E8; (* Fallback look down button *)
  4716.   {$EXTERNALSYM DIBUTTON_TPS_GLANCE_DOWN_LINK}
  4717.   DIBUTTON_TPS_GLANCE_LEFT_LINK           = $0A07C4E4; (* Fallback glance up button *)
  4718.   {$EXTERNALSYM DIBUTTON_TPS_GLANCE_LEFT_LINK}
  4719.   DIBUTTON_TPS_GLANCE_RIGHT_LINK          = $0A07C4EC; (* Fallback glance right button *)
  4720.   {$EXTERNALSYM DIBUTTON_TPS_GLANCE_RIGHT_LINK}
  4721.   DIBUTTON_TPS_DEVICE                     = $0A0044FE; (* Show input device and controls *)
  4722.   {$EXTERNALSYM DIBUTTON_TPS_DEVICE}
  4723.   DIBUTTON_TPS_PAUSE                      = $0A0044FC; (* Start / Pause / Restart game *)
  4724.   {$EXTERNALSYM DIBUTTON_TPS_PAUSE}
  4725.  
  4726. (*--- Strategy - Role Playing
  4727.       Navigation and problem solving are primary actions  ---*)
  4728.   DIVIRTUAL_STRATEGY_ROLEPLAYING          = $0B000000;
  4729.   {$EXTERNALSYM DIVIRTUAL_STRATEGY_ROLEPLAYING}
  4730.   DIAXIS_STRATEGYR_LATERAL                = $0B008201; (* sidestep - left/right *)
  4731.   {$EXTERNALSYM DIAXIS_STRATEGYR_LATERAL}
  4732.   DIAXIS_STRATEGYR_MOVE                   = $0B010202; (* move forward/backward *)
  4733.   {$EXTERNALSYM DIAXIS_STRATEGYR_MOVE}
  4734.   DIBUTTON_STRATEGYR_GET                  = $0B000401; (* Acquire item *)
  4735.   {$EXTERNALSYM DIBUTTON_STRATEGYR_GET}
  4736.   DIBUTTON_STRATEGYR_APPLY                = $0B000402; (* Use selected item *)
  4737.   {$EXTERNALSYM DIBUTTON_STRATEGYR_APPLY}
  4738.   DIBUTTON_STRATEGYR_SELECT               = $0B000403; (* Select nextitem *)
  4739.   {$EXTERNALSYM DIBUTTON_STRATEGYR_SELECT}
  4740.   DIBUTTON_STRATEGYR_ATTACK               = $0B000404; (* Attack *)
  4741.   {$EXTERNALSYM DIBUTTON_STRATEGYR_ATTACK}
  4742.   DIBUTTON_STRATEGYR_CAST                 = $0B000405; (* Cast Spell *)
  4743.   {$EXTERNALSYM DIBUTTON_STRATEGYR_CAST}
  4744.   DIBUTTON_STRATEGYR_CROUCH               = $0B000406; (* Crouch *)
  4745.   {$EXTERNALSYM DIBUTTON_STRATEGYR_CROUCH}
  4746.   DIBUTTON_STRATEGYR_JUMP                 = $0B000407; (* Jump *)
  4747.   {$EXTERNALSYM DIBUTTON_STRATEGYR_JUMP}
  4748.   DIBUTTON_STRATEGYR_MENU                 = $0B0004FD; (* Show menu options *)
  4749.   {$EXTERNALSYM DIBUTTON_STRATEGYR_MENU}
  4750. (*--- Priority 2 controls                            ---*)
  4751.  
  4752.   DIHATSWITCH_STRATEGYR_GLANCE            = $0B004601; (* Look around *)
  4753.   {$EXTERNALSYM DIHATSWITCH_STRATEGYR_GLANCE}
  4754.   DIBUTTON_STRATEGYR_MAP                  = $0B004408; (* Cycle through map options *)
  4755.   {$EXTERNALSYM DIBUTTON_STRATEGYR_MAP}
  4756.   DIBUTTON_STRATEGYR_DISPLAY              = $0B004409; (* Shows next on-screen display option *)
  4757.   {$EXTERNALSYM DIBUTTON_STRATEGYR_DISPLAY}
  4758.   DIAXIS_STRATEGYR_ROTATE                 = $0B024203; (* Turn body left/right *)
  4759.   {$EXTERNALSYM DIAXIS_STRATEGYR_ROTATE}
  4760.   DIBUTTON_STRATEGYR_LEFT_LINK            = $0B00C4E4; (* Fallback sidestep left button *)
  4761.   {$EXTERNALSYM DIBUTTON_STRATEGYR_LEFT_LINK}
  4762.   DIBUTTON_STRATEGYR_RIGHT_LINK           = $0B00C4EC; (* Fallback sidestep right button *)
  4763.   {$EXTERNALSYM DIBUTTON_STRATEGYR_RIGHT_LINK}
  4764.   DIBUTTON_STRATEGYR_FORWARD_LINK         = $0B0144E0; (* Fallback move forward button *)
  4765.   {$EXTERNALSYM DIBUTTON_STRATEGYR_FORWARD_LINK}
  4766.   DIBUTTON_STRATEGYR_BACK_LINK            = $0B0144E8; (* Fallback move backward button *)
  4767.   {$EXTERNALSYM DIBUTTON_STRATEGYR_BACK_LINK}
  4768.   DIBUTTON_STRATEGYR_ROTATE_LEFT_LINK     = $0B0244E4; (* Fallback turn body left button *)
  4769.   {$EXTERNALSYM DIBUTTON_STRATEGYR_ROTATE_LEFT_LINK}
  4770.   DIBUTTON_STRATEGYR_ROTATE_RIGHT_LINK    = $0B0244EC; (* Fallback turn body right button *)
  4771.   {$EXTERNALSYM DIBUTTON_STRATEGYR_ROTATE_RIGHT_LINK}
  4772.   DIBUTTON_STRATEGYR_DEVICE               = $0B0044FE; (* Show input device and controls *)
  4773.   {$EXTERNALSYM DIBUTTON_STRATEGYR_DEVICE}
  4774.   DIBUTTON_STRATEGYR_PAUSE                = $0B0044FC; (* Start / Pause / Restart game *)
  4775.   {$EXTERNALSYM DIBUTTON_STRATEGYR_PAUSE}
  4776.  
  4777. (*--- Strategy - Turn based
  4778.       Navigation and problem solving are primary actions  ---*)
  4779.   DIVIRTUAL_STRATEGY_TURN                 = $0C000000;
  4780.   {$EXTERNALSYM DIVIRTUAL_STRATEGY_TURN}
  4781.   DIAXIS_STRATEGYT_LATERAL                = $0C008201; (* Sidestep left/right *)
  4782.   {$EXTERNALSYM DIAXIS_STRATEGYT_LATERAL}
  4783.   DIAXIS_STRATEGYT_MOVE                   = $0C010202; (* Move forward/backwards *)
  4784.   {$EXTERNALSYM DIAXIS_STRATEGYT_MOVE}
  4785.   DIBUTTON_STRATEGYT_SELECT               = $0C000401; (* Select unit or object *)
  4786.   {$EXTERNALSYM DIBUTTON_STRATEGYT_SELECT}
  4787.   DIBUTTON_STRATEGYT_INSTRUCT             = $0C000402; (* Cycle through instructions *)
  4788.   {$EXTERNALSYM DIBUTTON_STRATEGYT_INSTRUCT}
  4789.   DIBUTTON_STRATEGYT_APPLY                = $0C000403; (* Apply selected instruction *)
  4790.   {$EXTERNALSYM DIBUTTON_STRATEGYT_APPLY}
  4791.   DIBUTTON_STRATEGYT_TEAM                 = $0C000404; (* Select next team / cycle through all *)
  4792.   {$EXTERNALSYM DIBUTTON_STRATEGYT_TEAM}
  4793.   DIBUTTON_STRATEGYT_TURN                 = $0C000405; (* Indicate turn over *)
  4794.   {$EXTERNALSYM DIBUTTON_STRATEGYT_TURN}
  4795.   DIBUTTON_STRATEGYT_MENU                 = $0C0004FD; (* Show menu options *)
  4796.   {$EXTERNALSYM DIBUTTON_STRATEGYT_MENU}
  4797. (*--- Priority 2 controls                            ---*)
  4798.  
  4799.   DIBUTTON_STRATEGYT_ZOOM                 = $0C004406; (* Zoom - in / out *)
  4800.   {$EXTERNALSYM DIBUTTON_STRATEGYT_ZOOM}
  4801.   DIBUTTON_STRATEGYT_MAP                  = $0C004407; (* cycle through map options *)
  4802.   {$EXTERNALSYM DIBUTTON_STRATEGYT_MAP}
  4803.   DIBUTTON_STRATEGYT_DISPLAY              = $0C004408; (* shows next on-screen display options *)
  4804.   {$EXTERNALSYM DIBUTTON_STRATEGYT_DISPLAY}
  4805.   DIBUTTON_STRATEGYT_LEFT_LINK            = $0C00C4E4; (* Fallback sidestep left button *)
  4806.   {$EXTERNALSYM DIBUTTON_STRATEGYT_LEFT_LINK}
  4807.   DIBUTTON_STRATEGYT_RIGHT_LINK           = $0C00C4EC; (* Fallback sidestep right button *)
  4808.   {$EXTERNALSYM DIBUTTON_STRATEGYT_RIGHT_LINK}
  4809.   DIBUTTON_STRATEGYT_FORWARD_LINK         = $0C0144E0; (* Fallback move forward button *)
  4810.   {$EXTERNALSYM DIBUTTON_STRATEGYT_FORWARD_LINK}
  4811.   DIBUTTON_STRATEGYT_BACK_LINK            = $0C0144E8; (* Fallback move back button *)
  4812.   {$EXTERNALSYM DIBUTTON_STRATEGYT_BACK_LINK}
  4813.   DIBUTTON_STRATEGYT_DEVICE               = $0C0044FE; (* Show input device and controls *)
  4814.   {$EXTERNALSYM DIBUTTON_STRATEGYT_DEVICE}
  4815.   DIBUTTON_STRATEGYT_PAUSE                = $0C0044FC; (* Start / Pause / Restart game *)
  4816.   {$EXTERNALSYM DIBUTTON_STRATEGYT_PAUSE}
  4817.  
  4818. (*--- Sports - Hunting
  4819.       Hunting                ---*)
  4820.   DIVIRTUAL_SPORTS_HUNTING                = $0D000000;
  4821.   {$EXTERNALSYM DIVIRTUAL_SPORTS_HUNTING}
  4822.   DIAXIS_HUNTING_LATERAL                  = $0D008201; (* sidestep left/right *)
  4823.   {$EXTERNALSYM DIAXIS_HUNTING_LATERAL}
  4824.   DIAXIS_HUNTING_MOVE                     = $0D010202; (* move forward/backwards *)
  4825.   {$EXTERNALSYM DIAXIS_HUNTING_MOVE}
  4826.   DIBUTTON_HUNTING_FIRE                   = $0D000401; (* Fire selected weapon *)
  4827.   {$EXTERNALSYM DIBUTTON_HUNTING_FIRE}
  4828.   DIBUTTON_HUNTING_AIM                    = $0D000402; (* Select aim/move *)
  4829.   {$EXTERNALSYM DIBUTTON_HUNTING_AIM}
  4830.   DIBUTTON_HUNTING_WEAPON                 = $0D000403; (* Select next weapon *)
  4831.   {$EXTERNALSYM DIBUTTON_HUNTING_WEAPON}
  4832.   DIBUTTON_HUNTING_BINOCULAR              = $0D000404; (* Look through Binoculars *)
  4833.   {$EXTERNALSYM DIBUTTON_HUNTING_BINOCULAR}
  4834.   DIBUTTON_HUNTING_CALL                   = $0D000405; (* Make animal call *)
  4835.   {$EXTERNALSYM DIBUTTON_HUNTING_CALL}
  4836.   DIBUTTON_HUNTING_MAP                    = $0D000406; (* View Map *)
  4837.   {$EXTERNALSYM DIBUTTON_HUNTING_MAP}
  4838.   DIBUTTON_HUNTING_SPECIAL                = $0D000407; (* Special game operation *)
  4839.   {$EXTERNALSYM DIBUTTON_HUNTING_SPECIAL}
  4840.   DIBUTTON_HUNTING_MENU                   = $0D0004FD; (* Show menu options *)
  4841.   {$EXTERNALSYM DIBUTTON_HUNTING_MENU}
  4842. (*--- Priority 2 controls                            ---*)
  4843.  
  4844.   DIHATSWITCH_HUNTING_GLANCE              = $0D004601; (* Look around *)
  4845.   {$EXTERNALSYM DIHATSWITCH_HUNTING_GLANCE}
  4846.   DIBUTTON_HUNTING_DISPLAY                = $0D004408; (* show next on-screen display option *)
  4847.   {$EXTERNALSYM DIBUTTON_HUNTING_DISPLAY}
  4848.   DIAXIS_HUNTING_ROTATE                   = $0D024203; (* Turn body left/right *)
  4849.   {$EXTERNALSYM DIAXIS_HUNTING_ROTATE}
  4850.   DIBUTTON_HUNTING_CROUCH                 = $0D004409; (* Crouch/ Climb / Swim down *)
  4851.   {$EXTERNALSYM DIBUTTON_HUNTING_CROUCH}
  4852.   DIBUTTON_HUNTING_JUMP                   = $0D00440A; (* Jump/ Climb up / Swim up *)
  4853.   {$EXTERNALSYM DIBUTTON_HUNTING_JUMP}
  4854.   DIBUTTON_HUNTING_FIRESECONDARY          = $0D00440B; (* Alternative fire button *)
  4855.   {$EXTERNALSYM DIBUTTON_HUNTING_FIRESECONDARY}
  4856.   DIBUTTON_HUNTING_LEFT_LINK              = $0D00C4E4; (* Fallback sidestep left button *)
  4857.   {$EXTERNALSYM DIBUTTON_HUNTING_LEFT_LINK}
  4858.   DIBUTTON_HUNTING_RIGHT_LINK             = $0D00C4EC; (* Fallback sidestep right button *)
  4859.   {$EXTERNALSYM DIBUTTON_HUNTING_RIGHT_LINK}
  4860.   DIBUTTON_HUNTING_FORWARD_LINK           = $0D0144E0; (* Fallback move forward button *)
  4861.   {$EXTERNALSYM DIBUTTON_HUNTING_FORWARD_LINK}
  4862.   DIBUTTON_HUNTING_BACK_LINK              = $0D0144E8; (* Fallback move back button *)
  4863.   {$EXTERNALSYM DIBUTTON_HUNTING_BACK_LINK}
  4864.   DIBUTTON_HUNTING_ROTATE_LEFT_LINK       = $0D0244E4; (* Fallback turn body left button *)
  4865.   {$EXTERNALSYM DIBUTTON_HUNTING_ROTATE_LEFT_LINK}
  4866.   DIBUTTON_HUNTING_ROTATE_RIGHT_LINK      = $0D0244EC; (* Fallback turn body right button *)
  4867.   {$EXTERNALSYM DIBUTTON_HUNTING_ROTATE_RIGHT_LINK}
  4868.   DIBUTTON_HUNTING_DEVICE                 = $0D0044FE; (* Show input device and controls *)
  4869.   {$EXTERNALSYM DIBUTTON_HUNTING_DEVICE}
  4870.   DIBUTTON_HUNTING_PAUSE                  = $0D0044FC; (* Start / Pause / Restart game *)
  4871.   {$EXTERNALSYM DIBUTTON_HUNTING_PAUSE}
  4872.  
  4873. (*--- Sports - Fishing
  4874.       Catching Fish is primary objective   ---*)
  4875.   DIVIRTUAL_SPORTS_FISHING                = $0E000000;
  4876.   {$EXTERNALSYM DIVIRTUAL_SPORTS_FISHING}
  4877.   DIAXIS_FISHING_LATERAL                  = $0E008201; (* sidestep left/right *)
  4878.   {$EXTERNALSYM DIAXIS_FISHING_LATERAL}
  4879.   DIAXIS_FISHING_MOVE                     = $0E010202; (* move forward/backwards *)
  4880.   {$EXTERNALSYM DIAXIS_FISHING_MOVE}
  4881.   DIBUTTON_FISHING_CAST                   = $0E000401; (* Cast line *)
  4882.   {$EXTERNALSYM DIBUTTON_FISHING_CAST}
  4883.   DIBUTTON_FISHING_TYPE                   = $0E000402; (* Select cast type *)
  4884.   {$EXTERNALSYM DIBUTTON_FISHING_TYPE}
  4885.   DIBUTTON_FISHING_BINOCULAR              = $0E000403; (* Look through Binocular *)
  4886.   {$EXTERNALSYM DIBUTTON_FISHING_BINOCULAR}
  4887.   DIBUTTON_FISHING_BAIT                   = $0E000404; (* Select type of Bait *)
  4888.   {$EXTERNALSYM DIBUTTON_FISHING_BAIT}
  4889.   DIBUTTON_FISHING_MAP                    = $0E000405; (* View Map *)
  4890.   {$EXTERNALSYM DIBUTTON_FISHING_MAP}
  4891.   DIBUTTON_FISHING_MENU                   = $0E0004FD; (* Show menu options *)
  4892.   {$EXTERNALSYM DIBUTTON_FISHING_MENU}
  4893. (*--- Priority 2 controls                            ---*)
  4894.  
  4895.   DIHATSWITCH_FISHING_GLANCE              = $0E004601; (* Look around *)
  4896.   {$EXTERNALSYM DIHATSWITCH_FISHING_GLANCE}
  4897.   DIBUTTON_FISHING_DISPLAY                = $0E004406; (* Show next on-screen display option *)
  4898.   {$EXTERNALSYM DIBUTTON_FISHING_DISPLAY}
  4899.   DIAXIS_FISHING_ROTATE                   = $0E024203; (* Turn character left / right *)
  4900.   {$EXTERNALSYM DIAXIS_FISHING_ROTATE}
  4901.   DIBUTTON_FISHING_CROUCH                 = $0E004407; (* Crouch/ Climb / Swim down *)
  4902.   {$EXTERNALSYM DIBUTTON_FISHING_CROUCH}
  4903.   DIBUTTON_FISHING_JUMP                   = $0E004408; (* Jump/ Climb up / Swim up *)
  4904.   {$EXTERNALSYM DIBUTTON_FISHING_JUMP}
  4905.   DIBUTTON_FISHING_LEFT_LINK              = $0E00C4E4; (* Fallback sidestep left button *)
  4906.   {$EXTERNALSYM DIBUTTON_FISHING_LEFT_LINK}
  4907.   DIBUTTON_FISHING_RIGHT_LINK             = $0E00C4EC; (* Fallback sidestep right button *)
  4908.   {$EXTERNALSYM DIBUTTON_FISHING_RIGHT_LINK}
  4909.   DIBUTTON_FISHING_FORWARD_LINK           = $0E0144E0; (* Fallback move forward button *)
  4910.   {$EXTERNALSYM DIBUTTON_FISHING_FORWARD_LINK}
  4911.   DIBUTTON_FISHING_BACK_LINK              = $0E0144E8; (* Fallback move back button *)
  4912.   {$EXTERNALSYM DIBUTTON_FISHING_BACK_LINK}
  4913.   DIBUTTON_FISHING_ROTATE_LEFT_LINK       = $0E0244E4; (* Fallback turn body left button *)
  4914.   {$EXTERNALSYM DIBUTTON_FISHING_ROTATE_LEFT_LINK}
  4915.   DIBUTTON_FISHING_ROTATE_RIGHT_LINK      = $0E0244EC; (* Fallback turn body right button *)
  4916.   {$EXTERNALSYM DIBUTTON_FISHING_ROTATE_RIGHT_LINK}
  4917.   DIBUTTON_FISHING_DEVICE                 = $0E0044FE; (* Show input device and controls *)
  4918.   {$EXTERNALSYM DIBUTTON_FISHING_DEVICE}
  4919.   DIBUTTON_FISHING_PAUSE                  = $0E0044FC; (* Start / Pause / Restart game *)
  4920.   {$EXTERNALSYM DIBUTTON_FISHING_PAUSE}
  4921.  
  4922. (*--- Sports - Baseball - Batting
  4923.       Batter control is primary objective  ---*)
  4924.   DIVIRTUAL_SPORTS_BASEBALL_BAT           = $0F000000;
  4925.   {$EXTERNALSYM DIVIRTUAL_SPORTS_BASEBALL_BAT}
  4926.   DIAXIS_BASEBALLB_LATERAL                = $0F008201; (* Aim left / right *)
  4927.   {$EXTERNALSYM DIAXIS_BASEBALLB_LATERAL}
  4928.   DIAXIS_BASEBALLB_MOVE                   = $0F010202; (* Aim up / down *)
  4929.   {$EXTERNALSYM DIAXIS_BASEBALLB_MOVE}
  4930.   DIBUTTON_BASEBALLB_SELECT               = $0F000401; (* cycle through swing options *)
  4931.   {$EXTERNALSYM DIBUTTON_BASEBALLB_SELECT}
  4932.   DIBUTTON_BASEBALLB_NORMAL               = $0F000402; (* normal swing *)
  4933.   {$EXTERNALSYM DIBUTTON_BASEBALLB_NORMAL}
  4934.   DIBUTTON_BASEBALLB_POWER                = $0F000403; (* swing for the fence *)
  4935.   {$EXTERNALSYM DIBUTTON_BASEBALLB_POWER}
  4936.   DIBUTTON_BASEBALLB_BUNT                 = $0F000404; (* bunt *)
  4937.   {$EXTERNALSYM DIBUTTON_BASEBALLB_BUNT}
  4938.   DIBUTTON_BASEBALLB_STEAL                = $0F000405; (* Base runner attempts to steal a base *)
  4939.   {$EXTERNALSYM DIBUTTON_BASEBALLB_STEAL}
  4940.   DIBUTTON_BASEBALLB_BURST                = $0F000406; (* Base runner invokes burst of speed *)
  4941.   {$EXTERNALSYM DIBUTTON_BASEBALLB_BURST}
  4942.   DIBUTTON_BASEBALLB_SLIDE                = $0F000407; (* Base runner slides into base *)
  4943.   {$EXTERNALSYM DIBUTTON_BASEBALLB_SLIDE}
  4944.   DIBUTTON_BASEBALLB_CONTACT              = $0F000408; (* Contact swing *)
  4945.   {$EXTERNALSYM DIBUTTON_BASEBALLB_CONTACT}
  4946.   DIBUTTON_BASEBALLB_MENU                 = $0F0004FD; (* Show menu options *)
  4947.   {$EXTERNALSYM DIBUTTON_BASEBALLB_MENU}
  4948. (*--- Priority 2 controls                            ---*)
  4949.  
  4950.   DIBUTTON_BASEBALLB_NOSTEAL              = $0F004409; (* Base runner goes back to a base *)
  4951.   {$EXTERNALSYM DIBUTTON_BASEBALLB_NOSTEAL}
  4952.   DIBUTTON_BASEBALLB_BOX                  = $0F00440A; (* Enter or exit batting box *)
  4953.   {$EXTERNALSYM DIBUTTON_BASEBALLB_BOX}
  4954.   DIBUTTON_BASEBALLB_LEFT_LINK            = $0F00C4E4; (* Fallback sidestep left button *)
  4955.   {$EXTERNALSYM DIBUTTON_BASEBALLB_LEFT_LINK}
  4956.   DIBUTTON_BASEBALLB_RIGHT_LINK           = $0F00C4EC; (* Fallback sidestep right button *)
  4957.   {$EXTERNALSYM DIBUTTON_BASEBALLB_RIGHT_LINK}
  4958.   DIBUTTON_BASEBALLB_FORWARD_LINK         = $0F0144E0; (* Fallback move forward button *)
  4959.   {$EXTERNALSYM DIBUTTON_BASEBALLB_FORWARD_LINK}
  4960.   DIBUTTON_BASEBALLB_BACK_LINK            = $0F0144E8; (* Fallback move back button *)
  4961.   {$EXTERNALSYM DIBUTTON_BASEBALLB_BACK_LINK}
  4962.   DIBUTTON_BASEBALLB_DEVICE               = $0F0044FE; (* Show input device and controls *)
  4963.   {$EXTERNALSYM DIBUTTON_BASEBALLB_DEVICE}
  4964.   DIBUTTON_BASEBALLB_PAUSE                = $0F0044FC; (* Start / Pause / Restart game *)
  4965.   {$EXTERNALSYM DIBUTTON_BASEBALLB_PAUSE}
  4966.  
  4967. (*--- Sports - Baseball - Pitching
  4968.       Pitcher control is primary objective   ---*)
  4969.   DIVIRTUAL_SPORTS_BASEBALL_PITCH         = $10000000;
  4970.   {$EXTERNALSYM DIVIRTUAL_SPORTS_BASEBALL_PITCH}
  4971.   DIAXIS_BASEBALLP_LATERAL                = $10008201; (* Aim left / right *)
  4972.   {$EXTERNALSYM DIAXIS_BASEBALLP_LATERAL}
  4973.   DIAXIS_BASEBALLP_MOVE                   = $10010202; (* Aim up / down *)
  4974.   {$EXTERNALSYM DIAXIS_BASEBALLP_MOVE}
  4975.   DIBUTTON_BASEBALLP_SELECT               = $10000401; (* cycle through pitch selections *)
  4976.   {$EXTERNALSYM DIBUTTON_BASEBALLP_SELECT}
  4977.   DIBUTTON_BASEBALLP_PITCH                = $10000402; (* throw pitch *)
  4978.   {$EXTERNALSYM DIBUTTON_BASEBALLP_PITCH}
  4979.   DIBUTTON_BASEBALLP_BASE                 = $10000403; (* select base to throw to *)
  4980.   {$EXTERNALSYM DIBUTTON_BASEBALLP_BASE}
  4981.   DIBUTTON_BASEBALLP_THROW                = $10000404; (* throw to base *)
  4982.   {$EXTERNALSYM DIBUTTON_BASEBALLP_THROW}
  4983.   DIBUTTON_BASEBALLP_FAKE                 = $10000405; (* Fake a throw to a base *)
  4984.   {$EXTERNALSYM DIBUTTON_BASEBALLP_FAKE}
  4985.   DIBUTTON_BASEBALLP_MENU                 = $100004FD; (* Show menu options *)
  4986.   {$EXTERNALSYM DIBUTTON_BASEBALLP_MENU}
  4987. (*--- Priority 2 controls                            ---*)
  4988.  
  4989.   DIBUTTON_BASEBALLP_WALK                 = $10004406; (* Throw intentional walk / pitch out *)
  4990.   {$EXTERNALSYM DIBUTTON_BASEBALLP_WALK}
  4991.   DIBUTTON_BASEBALLP_LOOK                 = $10004407; (* Look at runners on bases *)
  4992.   {$EXTERNALSYM DIBUTTON_BASEBALLP_LOOK}
  4993.   DIBUTTON_BASEBALLP_LEFT_LINK            = $1000C4E4; (* Fallback sidestep left button *)
  4994.   {$EXTERNALSYM DIBUTTON_BASEBALLP_LEFT_LINK}
  4995.   DIBUTTON_BASEBALLP_RIGHT_LINK           = $1000C4EC; (* Fallback sidestep right button *)
  4996.   {$EXTERNALSYM DIBUTTON_BASEBALLP_RIGHT_LINK}
  4997.   DIBUTTON_BASEBALLP_FORWARD_LINK         = $100144E0; (* Fallback move forward button *)
  4998.   {$EXTERNALSYM DIBUTTON_BASEBALLP_FORWARD_LINK}
  4999.   DIBUTTON_BASEBALLP_BACK_LINK            = $100144E8; (* Fallback move back button *)
  5000.   {$EXTERNALSYM DIBUTTON_BASEBALLP_BACK_LINK}
  5001.   DIBUTTON_BASEBALLP_DEVICE               = $100044FE; (* Show input device and controls *)
  5002.   {$EXTERNALSYM DIBUTTON_BASEBALLP_DEVICE}
  5003.   DIBUTTON_BASEBALLP_PAUSE                = $100044FC; (* Start / Pause / Restart game *)
  5004.   {$EXTERNALSYM DIBUTTON_BASEBALLP_PAUSE}
  5005.  
  5006. (*--- Sports - Baseball - Fielding
  5007.       Fielder control is primary objective  ---*)
  5008.   DIVIRTUAL_SPORTS_BASEBALL_FIELD         = $11000000;
  5009.   {$EXTERNALSYM DIVIRTUAL_SPORTS_BASEBALL_FIELD}
  5010.   DIAXIS_BASEBALLF_LATERAL                = $11008201; (* Aim left / right *)
  5011.   {$EXTERNALSYM DIAXIS_BASEBALLF_LATERAL}
  5012.   DIAXIS_BASEBALLF_MOVE                   = $11010202; (* Aim up / down *)
  5013.   {$EXTERNALSYM DIAXIS_BASEBALLF_MOVE}
  5014.   DIBUTTON_BASEBALLF_NEAREST              = $11000401; (* Switch to fielder nearest to the ball *)
  5015.   {$EXTERNALSYM DIBUTTON_BASEBALLF_NEAREST}
  5016.   DIBUTTON_BASEBALLF_THROW1               = $11000402; (* Make conservative throw *)
  5017.   {$EXTERNALSYM DIBUTTON_BASEBALLF_THROW1}
  5018.   DIBUTTON_BASEBALLF_THROW2               = $11000403; (* Make aggressive throw *)
  5019.   {$EXTERNALSYM DIBUTTON_BASEBALLF_THROW2}
  5020.   DIBUTTON_BASEBALLF_BURST                = $11000404; (* Invoke burst of speed *)
  5021.   {$EXTERNALSYM DIBUTTON_BASEBALLF_BURST}
  5022.   DIBUTTON_BASEBALLF_JUMP                 = $11000405; (* Jump to catch ball *)
  5023.   {$EXTERNALSYM DIBUTTON_BASEBALLF_JUMP}
  5024.   DIBUTTON_BASEBALLF_DIVE                 = $11000406; (* Dive to catch ball *)
  5025.   {$EXTERNALSYM DIBUTTON_BASEBALLF_DIVE}
  5026.   DIBUTTON_BASEBALLF_MENU                 = $110004FD; (* Show menu options *)
  5027.   {$EXTERNALSYM DIBUTTON_BASEBALLF_MENU}
  5028. (*--- Priority 2 controls                            ---*)
  5029.  
  5030.   DIBUTTON_BASEBALLF_SHIFTIN              = $11004407; (* Shift the infield positioning *)
  5031.   {$EXTERNALSYM DIBUTTON_BASEBALLF_SHIFTIN}
  5032.   DIBUTTON_BASEBALLF_SHIFTOUT             = $11004408; (* Shift the outfield positioning *)
  5033.   {$EXTERNALSYM DIBUTTON_BASEBALLF_SHIFTOUT}
  5034.   DIBUTTON_BASEBALLF_AIM_LEFT_LINK        = $1100C4E4; (* Fallback aim left button *)
  5035.   {$EXTERNALSYM DIBUTTON_BASEBALLF_AIM_LEFT_LINK}
  5036.   DIBUTTON_BASEBALLF_AIM_RIGHT_LINK       = $1100C4EC; (* Fallback aim right button *)
  5037.   {$EXTERNALSYM DIBUTTON_BASEBALLF_AIM_RIGHT_LINK}
  5038.   DIBUTTON_BASEBALLF_FORWARD_LINK         = $110144E0; (* Fallback move forward button *)
  5039.   {$EXTERNALSYM DIBUTTON_BASEBALLF_FORWARD_LINK}
  5040.   DIBUTTON_BASEBALLF_BACK_LINK            = $110144E8; (* Fallback move back button *)
  5041.   {$EXTERNALSYM DIBUTTON_BASEBALLF_BACK_LINK}
  5042.   DIBUTTON_BASEBALLF_DEVICE               = $110044FE; (* Show input device and controls *)
  5043.   {$EXTERNALSYM DIBUTTON_BASEBALLF_DEVICE}
  5044.   DIBUTTON_BASEBALLF_PAUSE                = $110044FC; (* Start / Pause / Restart game *)
  5045.   {$EXTERNALSYM DIBUTTON_BASEBALLF_PAUSE}
  5046.  
  5047. (*--- Sports - Basketball - Offense
  5048.       Offense  ---*)
  5049.   DIVIRTUAL_SPORTS_BASKETBALL_OFFENSE     = $12000000;
  5050.   {$EXTERNALSYM DIVIRTUAL_SPORTS_BASKETBALL_OFFENSE}
  5051.   DIAXIS_BBALLO_LATERAL                   = $12008201; (* left / right *)
  5052.   {$EXTERNALSYM DIAXIS_BBALLO_LATERAL}
  5053.   DIAXIS_BBALLO_MOVE                      = $12010202; (* up / down *)
  5054.   {$EXTERNALSYM DIAXIS_BBALLO_MOVE}
  5055.   DIBUTTON_BBALLO_SHOOT                   = $12000401; (* shoot basket *)
  5056.   {$EXTERNALSYM DIBUTTON_BBALLO_SHOOT}
  5057.   DIBUTTON_BBALLO_DUNK                    = $12000402; (* dunk basket *)
  5058.   {$EXTERNALSYM DIBUTTON_BBALLO_DUNK}
  5059.   DIBUTTON_BBALLO_PASS                    = $12000403; (* throw pass *)
  5060.   {$EXTERNALSYM DIBUTTON_BBALLO_PASS}
  5061.   DIBUTTON_BBALLO_FAKE                    = $12000404; (* fake shot or pass *)
  5062.   {$EXTERNALSYM DIBUTTON_BBALLO_FAKE}
  5063.   DIBUTTON_BBALLO_SPECIAL                 = $12000405; (* apply special move *)
  5064.   {$EXTERNALSYM DIBUTTON_BBALLO_SPECIAL}
  5065.   DIBUTTON_BBALLO_PLAYER                  = $12000406; (* select next player *)
  5066.   {$EXTERNALSYM DIBUTTON_BBALLO_PLAYER}
  5067.   DIBUTTON_BBALLO_BURST                   = $12000407; (* invoke burst *)
  5068.   {$EXTERNALSYM DIBUTTON_BBALLO_BURST}
  5069.   DIBUTTON_BBALLO_CALL                    = $12000408; (* call for ball / pass to me *)
  5070.   {$EXTERNALSYM DIBUTTON_BBALLO_CALL}
  5071.   DIBUTTON_BBALLO_MENU                    = $120004FD; (* Show menu options *)
  5072.   {$EXTERNALSYM DIBUTTON_BBALLO_MENU}
  5073. (*--- Priority 2 controls                            ---*)
  5074.  
  5075.   DIHATSWITCH_BBALLO_GLANCE               = $12004601; (* scroll view *)
  5076.   {$EXTERNALSYM DIHATSWITCH_BBALLO_GLANCE}
  5077.   DIBUTTON_BBALLO_SCREEN                  = $12004409; (* Call for screen *)
  5078.   {$EXTERNALSYM DIBUTTON_BBALLO_SCREEN}
  5079.   DIBUTTON_BBALLO_PLAY                    = $1200440A; (* Call for specific offensive play *)
  5080.   {$EXTERNALSYM DIBUTTON_BBALLO_PLAY}
  5081.   DIBUTTON_BBALLO_JAB                     = $1200440B; (* Initiate fake drive to basket *)
  5082.   {$EXTERNALSYM DIBUTTON_BBALLO_JAB}
  5083.   DIBUTTON_BBALLO_POST                    = $1200440C; (* Perform post move *)
  5084.   {$EXTERNALSYM DIBUTTON_BBALLO_POST}
  5085.   DIBUTTON_BBALLO_TIMEOUT                 = $1200440D; (* Time Out *)
  5086.   {$EXTERNALSYM DIBUTTON_BBALLO_TIMEOUT}
  5087.   DIBUTTON_BBALLO_SUBSTITUTE              = $1200440E; (* substitute one player for another *)
  5088.   {$EXTERNALSYM DIBUTTON_BBALLO_SUBSTITUTE}
  5089.   DIBUTTON_BBALLO_LEFT_LINK               = $1200C4E4; (* Fallback sidestep left button *)
  5090.   {$EXTERNALSYM DIBUTTON_BBALLO_LEFT_LINK}
  5091.   DIBUTTON_BBALLO_RIGHT_LINK              = $1200C4EC; (* Fallback sidestep right button *)
  5092.   {$EXTERNALSYM DIBUTTON_BBALLO_RIGHT_LINK}
  5093.   DIBUTTON_BBALLO_FORWARD_LINK            = $120144E0; (* Fallback move forward button *)
  5094.   {$EXTERNALSYM DIBUTTON_BBALLO_FORWARD_LINK}
  5095.   DIBUTTON_BBALLO_BACK_LINK               = $120144E8; (* Fallback move back button *)
  5096.   {$EXTERNALSYM DIBUTTON_BBALLO_BACK_LINK}
  5097.   DIBUTTON_BBALLO_DEVICE                  = $120044FE; (* Show input device and controls *)
  5098.   {$EXTERNALSYM DIBUTTON_BBALLO_DEVICE}
  5099.   DIBUTTON_BBALLO_PAUSE                   = $120044FC; (* Start / Pause / Restart game *)
  5100.   {$EXTERNALSYM DIBUTTON_BBALLO_PAUSE}
  5101.  
  5102. (*--- Sports - Basketball - Defense
  5103.       Defense  ---*)
  5104.   DIVIRTUAL_SPORTS_BASKETBALL_DEFENSE     = $13000000;
  5105.   {$EXTERNALSYM DIVIRTUAL_SPORTS_BASKETBALL_DEFENSE}
  5106.   DIAXIS_BBALLD_LATERAL                   = $13008201; (* left / right *)
  5107.   {$EXTERNALSYM DIAXIS_BBALLD_LATERAL}
  5108.   DIAXIS_BBALLD_MOVE                      = $13010202; (* up / down *)
  5109.   {$EXTERNALSYM DIAXIS_BBALLD_MOVE}
  5110.   DIBUTTON_BBALLD_JUMP                    = $13000401; (* jump to block shot *)
  5111.   {$EXTERNALSYM DIBUTTON_BBALLD_JUMP}
  5112.   DIBUTTON_BBALLD_STEAL                   = $13000402; (* attempt to steal ball *)
  5113.   {$EXTERNALSYM DIBUTTON_BBALLD_STEAL}
  5114.   DIBUTTON_BBALLD_FAKE                    = $13000403; (* fake block or steal *)
  5115.   {$EXTERNALSYM DIBUTTON_BBALLD_FAKE}
  5116.   DIBUTTON_BBALLD_SPECIAL                 = $13000404; (* apply special move *)
  5117.   {$EXTERNALSYM DIBUTTON_BBALLD_SPECIAL}
  5118.   DIBUTTON_BBALLD_PLAYER                  = $13000405; (* select next player *)
  5119.   {$EXTERNALSYM DIBUTTON_BBALLD_PLAYER}
  5120.   DIBUTTON_BBALLD_BURST                   = $13000406; (* invoke burst *)
  5121.   {$EXTERNALSYM DIBUTTON_BBALLD_BURST}
  5122.   DIBUTTON_BBALLD_PLAY                    = $13000407; (* call for specific defensive play *)
  5123.   {$EXTERNALSYM DIBUTTON_BBALLD_PLAY}
  5124.   DIBUTTON_BBALLD_MENU                    = $130004FD; (* Show menu options *)
  5125.   {$EXTERNALSYM DIBUTTON_BBALLD_MENU}
  5126. (*--- Priority 2 controls                            ---*)
  5127.  
  5128.   DIHATSWITCH_BBALLD_GLANCE               = $13004601; (* scroll view *)
  5129.   {$EXTERNALSYM DIHATSWITCH_BBALLD_GLANCE}
  5130.   DIBUTTON_BBALLD_TIMEOUT                 = $13004408; (* Time Out *)
  5131.   {$EXTERNALSYM DIBUTTON_BBALLD_TIMEOUT}
  5132.   DIBUTTON_BBALLD_SUBSTITUTE              = $13004409; (* substitute one player for another *)
  5133.   {$EXTERNALSYM DIBUTTON_BBALLD_SUBSTITUTE}
  5134.   DIBUTTON_BBALLD_LEFT_LINK               = $1300C4E4; (* Fallback sidestep left button *)
  5135.   {$EXTERNALSYM DIBUTTON_BBALLD_LEFT_LINK}
  5136.   DIBUTTON_BBALLD_RIGHT_LINK              = $1300C4EC; (* Fallback sidestep right button *)
  5137.   {$EXTERNALSYM DIBUTTON_BBALLD_RIGHT_LINK}
  5138.   DIBUTTON_BBALLD_FORWARD_LINK            = $130144E0; (* Fallback move forward button *)
  5139.   {$EXTERNALSYM DIBUTTON_BBALLD_FORWARD_LINK}
  5140.   DIBUTTON_BBALLD_BACK_LINK               = $130144E8; (* Fallback move back button *)
  5141.   {$EXTERNALSYM DIBUTTON_BBALLD_BACK_LINK}
  5142.   DIBUTTON_BBALLD_DEVICE                  = $130044FE; (* Show input device and controls *)
  5143.   {$EXTERNALSYM DIBUTTON_BBALLD_DEVICE}
  5144.   DIBUTTON_BBALLD_PAUSE                   = $130044FC; (* Start / Pause / Restart game *)
  5145.   {$EXTERNALSYM DIBUTTON_BBALLD_PAUSE}
  5146.  
  5147. (*--- Sports - Football - Play
  5148.       Play selection  ---*)
  5149.   DIVIRTUAL_SPORTS_FOOTBALL_FIELD         = $14000000;
  5150.   {$EXTERNALSYM DIVIRTUAL_SPORTS_FOOTBALL_FIELD}
  5151.   DIBUTTON_FOOTBALLP_PLAY                 = $14000401; (* cycle through available plays *)
  5152.   {$EXTERNALSYM DIBUTTON_FOOTBALLP_PLAY}
  5153.   DIBUTTON_FOOTBALLP_SELECT               = $14000402; (* select play *)
  5154.   {$EXTERNALSYM DIBUTTON_FOOTBALLP_SELECT}
  5155.   DIBUTTON_FOOTBALLP_HELP                 = $14000403; (* Bring up pop-up help *)
  5156.   {$EXTERNALSYM DIBUTTON_FOOTBALLP_HELP}
  5157.   DIBUTTON_FOOTBALLP_MENU                 = $140004FD; (* Show menu options *)
  5158.   {$EXTERNALSYM DIBUTTON_FOOTBALLP_MENU}
  5159. (*--- Priority 2 controls                            ---*)
  5160.  
  5161.   DIBUTTON_FOOTBALLP_DEVICE               = $140044FE; (* Show input device and controls *)
  5162.   {$EXTERNALSYM DIBUTTON_FOOTBALLP_DEVICE}
  5163.   DIBUTTON_FOOTBALLP_PAUSE                = $140044FC; (* Start / Pause / Restart game *)
  5164.   {$EXTERNALSYM DIBUTTON_FOOTBALLP_PAUSE}
  5165.  
  5166. (*--- Sports - Football - QB
  5167.       Offense: Quarterback / Kicker  ---*)
  5168.   DIVIRTUAL_SPORTS_FOOTBALL_QBCK          = $15000000;
  5169.   {$EXTERNALSYM DIVIRTUAL_SPORTS_FOOTBALL_QBCK}
  5170.   DIAXIS_FOOTBALLQ_LATERAL                = $15008201; (* Move / Aim: left / right *)
  5171.   {$EXTERNALSYM DIAXIS_FOOTBALLQ_LATERAL}
  5172.   DIAXIS_FOOTBALLQ_MOVE                   = $15010202; (* Move / Aim: up / down *)
  5173.   {$EXTERNALSYM DIAXIS_FOOTBALLQ_MOVE}
  5174.   DIBUTTON_FOOTBALLQ_SELECT               = $15000401; (* Select *)
  5175.   {$EXTERNALSYM DIBUTTON_FOOTBALLQ_SELECT}
  5176.   DIBUTTON_FOOTBALLQ_SNAP                 = $15000402; (* snap ball - start play *)
  5177.   {$EXTERNALSYM DIBUTTON_FOOTBALLQ_SNAP}
  5178.   DIBUTTON_FOOTBALLQ_JUMP                 = $15000403; (* jump over defender *)
  5179.   {$EXTERNALSYM DIBUTTON_FOOTBALLQ_JUMP}
  5180.   DIBUTTON_FOOTBALLQ_SLIDE                = $15000404; (* Dive/Slide *)
  5181.   {$EXTERNALSYM DIBUTTON_FOOTBALLQ_SLIDE}
  5182.   DIBUTTON_FOOTBALLQ_PASS                 = $15000405; (* throws pass to receiver *)
  5183.   {$EXTERNALSYM DIBUTTON_FOOTBALLQ_PASS}
  5184.   DIBUTTON_FOOTBALLQ_FAKE                 = $15000406; (* pump fake pass or fake kick *)
  5185.   {$EXTERNALSYM DIBUTTON_FOOTBALLQ_FAKE}
  5186.   DIBUTTON_FOOTBALLQ_MENU                 = $150004FD; (* Show menu options *)
  5187.   {$EXTERNALSYM DIBUTTON_FOOTBALLQ_MENU}
  5188. (*--- Priority 2 controls                            ---*)
  5189.  
  5190.   DIBUTTON_FOOTBALLQ_FAKESNAP             = $15004407; (* Fake snap  *)
  5191.   {$EXTERNALSYM DIBUTTON_FOOTBALLQ_FAKESNAP}
  5192.   DIBUTTON_FOOTBALLQ_MOTION               = $15004408; (* Send receivers in motion *)
  5193.   {$EXTERNALSYM DIBUTTON_FOOTBALLQ_MOTION}
  5194.   DIBUTTON_FOOTBALLQ_AUDIBLE              = $15004409; (* Change offensive play at line of scrimmage *)
  5195.   {$EXTERNALSYM DIBUTTON_FOOTBALLQ_AUDIBLE}
  5196.   DIBUTTON_FOOTBALLQ_LEFT_LINK            = $1500C4E4; (* Fallback sidestep left button *)
  5197.   {$EXTERNALSYM DIBUTTON_FOOTBALLQ_LEFT_LINK}
  5198.   DIBUTTON_FOOTBALLQ_RIGHT_LINK           = $1500C4EC; (* Fallback sidestep right button *)
  5199.   {$EXTERNALSYM DIBUTTON_FOOTBALLQ_RIGHT_LINK}
  5200.   DIBUTTON_FOOTBALLQ_FORWARD_LINK         = $150144E0; (* Fallback move forward button *)
  5201.   {$EXTERNALSYM DIBUTTON_FOOTBALLQ_FORWARD_LINK}
  5202.   DIBUTTON_FOOTBALLQ_BACK_LINK            = $150144E8; (* Fallback move back button *)
  5203.   {$EXTERNALSYM DIBUTTON_FOOTBALLQ_BACK_LINK}
  5204.   DIBUTTON_FOOTBALLQ_DEVICE               = $150044FE; (* Show input device and controls *)
  5205.   {$EXTERNALSYM DIBUTTON_FOOTBALLQ_DEVICE}
  5206.   DIBUTTON_FOOTBALLQ_PAUSE                = $150044FC; (* Start / Pause / Restart game *)
  5207.   {$EXTERNALSYM DIBUTTON_FOOTBALLQ_PAUSE}
  5208.  
  5209. (*--- Sports - Football - Offense
  5210.       Offense - Runner  ---*)
  5211.   DIVIRTUAL_SPORTS_FOOTBALL_OFFENSE       = $16000000;
  5212.   {$EXTERNALSYM DIVIRTUAL_SPORTS_FOOTBALL_OFFENSE}
  5213.   DIAXIS_FOOTBALLO_LATERAL                = $16008201; (* Move / Aim: left / right *)
  5214.   {$EXTERNALSYM DIAXIS_FOOTBALLO_LATERAL}
  5215.   DIAXIS_FOOTBALLO_MOVE                   = $16010202; (* Move / Aim: up / down *)
  5216.   {$EXTERNALSYM DIAXIS_FOOTBALLO_MOVE}
  5217.   DIBUTTON_FOOTBALLO_JUMP                 = $16000401; (* jump or hurdle over defender *)
  5218.   {$EXTERNALSYM DIBUTTON_FOOTBALLO_JUMP}
  5219.   DIBUTTON_FOOTBALLO_LEFTARM              = $16000402; (* holds out left arm *)
  5220.   {$EXTERNALSYM DIBUTTON_FOOTBALLO_LEFTARM}
  5221.   DIBUTTON_FOOTBALLO_RIGHTARM             = $16000403; (* holds out right arm *)
  5222.   {$EXTERNALSYM DIBUTTON_FOOTBALLO_RIGHTARM}
  5223.   DIBUTTON_FOOTBALLO_THROW                = $16000404; (* throw pass or lateral ball to another runner *)
  5224.   {$EXTERNALSYM DIBUTTON_FOOTBALLO_THROW}
  5225.   DIBUTTON_FOOTBALLO_SPIN                 = $16000405; (* Spin to avoid defenders *)
  5226.   {$EXTERNALSYM DIBUTTON_FOOTBALLO_SPIN}
  5227.   DIBUTTON_FOOTBALLO_MENU                 = $160004FD; (* Show menu options *)
  5228.   {$EXTERNALSYM DIBUTTON_FOOTBALLO_MENU}
  5229. (*--- Priority 2 controls                            ---*)
  5230.  
  5231.   DIBUTTON_FOOTBALLO_JUKE                 = $16004406; (* Use special move to avoid defenders *)
  5232.   {$EXTERNALSYM DIBUTTON_FOOTBALLO_JUKE}
  5233.   DIBUTTON_FOOTBALLO_SHOULDER             = $16004407; (* Lower shoulder to run over defenders *)
  5234.   {$EXTERNALSYM DIBUTTON_FOOTBALLO_SHOULDER}
  5235.   DIBUTTON_FOOTBALLO_TURBO                = $16004408; (* Speed burst past defenders *)
  5236.   {$EXTERNALSYM DIBUTTON_FOOTBALLO_TURBO}
  5237.   DIBUTTON_FOOTBALLO_DIVE                 = $16004409; (* Dive over defenders *)
  5238.   {$EXTERNALSYM DIBUTTON_FOOTBALLO_DIVE}
  5239.   DIBUTTON_FOOTBALLO_ZOOM                 = $1600440A; (* Zoom view in / out *)
  5240.   {$EXTERNALSYM DIBUTTON_FOOTBALLO_ZOOM}
  5241.   DIBUTTON_FOOTBALLO_SUBSTITUTE           = $1600440B; (* substitute one player for another *)
  5242.   {$EXTERNALSYM DIBUTTON_FOOTBALLO_SUBSTITUTE}
  5243.   DIBUTTON_FOOTBALLO_LEFT_LINK            = $1600C4E4; (* Fallback sidestep left button *)
  5244.   {$EXTERNALSYM DIBUTTON_FOOTBALLO_LEFT_LINK}
  5245.   DIBUTTON_FOOTBALLO_RIGHT_LINK           = $1600C4EC; (* Fallback sidestep right button *)
  5246.   {$EXTERNALSYM DIBUTTON_FOOTBALLO_RIGHT_LINK}
  5247.   DIBUTTON_FOOTBALLO_FORWARD_LINK         = $160144E0; (* Fallback move forward button *)
  5248.   {$EXTERNALSYM DIBUTTON_FOOTBALLO_FORWARD_LINK}
  5249.   DIBUTTON_FOOTBALLO_BACK_LINK            = $160144E8; (* Fallback move back button *)
  5250.   {$EXTERNALSYM DIBUTTON_FOOTBALLO_BACK_LINK}
  5251.   DIBUTTON_FOOTBALLO_DEVICE               = $160044FE; (* Show input device and controls *)
  5252.   {$EXTERNALSYM DIBUTTON_FOOTBALLO_DEVICE}
  5253.   DIBUTTON_FOOTBALLO_PAUSE                = $160044FC; (* Start / Pause / Restart game *)
  5254.   {$EXTERNALSYM DIBUTTON_FOOTBALLO_PAUSE}
  5255.  
  5256. (*--- Sports - Football - Defense
  5257.       Defense     ---*)
  5258.   DIVIRTUAL_SPORTS_FOOTBALL_DEFENSE       = $17000000;
  5259.   {$EXTERNALSYM DIVIRTUAL_SPORTS_FOOTBALL_DEFENSE}
  5260.   DIAXIS_FOOTBALLD_LATERAL                = $17008201; (* Move / Aim: left / right *)
  5261.   {$EXTERNALSYM DIAXIS_FOOTBALLD_LATERAL}
  5262.   DIAXIS_FOOTBALLD_MOVE                   = $17010202; (* Move / Aim: up / down *)
  5263.   {$EXTERNALSYM DIAXIS_FOOTBALLD_MOVE}
  5264.   DIBUTTON_FOOTBALLD_PLAY                 = $17000401; (* cycle through available plays *)
  5265.   {$EXTERNALSYM DIBUTTON_FOOTBALLD_PLAY}
  5266.   DIBUTTON_FOOTBALLD_SELECT               = $17000402; (* select player closest to the ball *)
  5267.   {$EXTERNALSYM DIBUTTON_FOOTBALLD_SELECT}
  5268.   DIBUTTON_FOOTBALLD_JUMP                 = $17000403; (* jump to intercept or block *)
  5269.   {$EXTERNALSYM DIBUTTON_FOOTBALLD_JUMP}
  5270.   DIBUTTON_FOOTBALLD_TACKLE               = $17000404; (* tackler runner *)
  5271.   {$EXTERNALSYM DIBUTTON_FOOTBALLD_TACKLE}
  5272.   DIBUTTON_FOOTBALLD_FAKE                 = $17000405; (* hold down to fake tackle or intercept *)
  5273.   {$EXTERNALSYM DIBUTTON_FOOTBALLD_FAKE}
  5274.   DIBUTTON_FOOTBALLD_SUPERTACKLE          = $17000406; (* Initiate special tackle *)
  5275.   {$EXTERNALSYM DIBUTTON_FOOTBALLD_SUPERTACKLE}
  5276.   DIBUTTON_FOOTBALLD_MENU                 = $170004FD; (* Show menu options *)
  5277.   {$EXTERNALSYM DIBUTTON_FOOTBALLD_MENU}
  5278. (*--- Priority 2 controls                            ---*)
  5279.  
  5280.   DIBUTTON_FOOTBALLD_SPIN                 = $17004407; (* Spin to beat offensive line *)
  5281.   {$EXTERNALSYM DIBUTTON_FOOTBALLD_SPIN}
  5282.   DIBUTTON_FOOTBALLD_SWIM                 = $17004408; (* Swim to beat the offensive line *)
  5283.   {$EXTERNALSYM DIBUTTON_FOOTBALLD_SWIM}
  5284.   DIBUTTON_FOOTBALLD_BULLRUSH             = $17004409; (* Bull rush the offensive line *)
  5285.   {$EXTERNALSYM DIBUTTON_FOOTBALLD_BULLRUSH}
  5286.   DIBUTTON_FOOTBALLD_RIP                  = $1700440A; (* Rip the offensive line *)
  5287.   {$EXTERNALSYM DIBUTTON_FOOTBALLD_RIP}
  5288.   DIBUTTON_FOOTBALLD_AUDIBLE              = $1700440B; (* Change defensive play at the line of scrimmage *)
  5289.   {$EXTERNALSYM DIBUTTON_FOOTBALLD_AUDIBLE}
  5290.   DIBUTTON_FOOTBALLD_ZOOM                 = $1700440C; (* Zoom view in / out *)
  5291.   {$EXTERNALSYM DIBUTTON_FOOTBALLD_ZOOM}
  5292.   DIBUTTON_FOOTBALLD_SUBSTITUTE           = $1700440D; (* substitute one player for another *)
  5293.   {$EXTERNALSYM DIBUTTON_FOOTBALLD_SUBSTITUTE}
  5294.   DIBUTTON_FOOTBALLD_LEFT_LINK            = $1700C4E4; (* Fallback sidestep left button *)
  5295.   {$EXTERNALSYM DIBUTTON_FOOTBALLD_LEFT_LINK}
  5296.   DIBUTTON_FOOTBALLD_RIGHT_LINK           = $1700C4EC; (* Fallback sidestep right button *)
  5297.   {$EXTERNALSYM DIBUTTON_FOOTBALLD_RIGHT_LINK}
  5298.   DIBUTTON_FOOTBALLD_FORWARD_LINK         = $170144E0; (* Fallback move forward button *)
  5299.   {$EXTERNALSYM DIBUTTON_FOOTBALLD_FORWARD_LINK}
  5300.   DIBUTTON_FOOTBALLD_BACK_LINK            = $170144E8; (* Fallback move back button *)
  5301.   {$EXTERNALSYM DIBUTTON_FOOTBALLD_BACK_LINK}
  5302.   DIBUTTON_FOOTBALLD_DEVICE               = $170044FE; (* Show input device and controls *)
  5303.   {$EXTERNALSYM DIBUTTON_FOOTBALLD_DEVICE}
  5304.   DIBUTTON_FOOTBALLD_PAUSE                = $170044FC; (* Start / Pause / Restart game *)
  5305.   {$EXTERNALSYM DIBUTTON_FOOTBALLD_PAUSE}
  5306.  
  5307. (*--- Sports - Golf
  5308.                                 ---*)
  5309.   DIVIRTUAL_SPORTS_GOLF                   = $18000000;
  5310.   {$EXTERNALSYM DIVIRTUAL_SPORTS_GOLF}
  5311.   DIAXIS_GOLF_LATERAL                     = $18008201; (* Move / Aim: left / right *)
  5312.   {$EXTERNALSYM DIAXIS_GOLF_LATERAL}
  5313.   DIAXIS_GOLF_MOVE                        = $18010202; (* Move / Aim: up / down *)
  5314.   {$EXTERNALSYM DIAXIS_GOLF_MOVE}
  5315.   DIBUTTON_GOLF_SWING                     = $18000401; (* swing club *)
  5316.   {$EXTERNALSYM DIBUTTON_GOLF_SWING}
  5317.   DIBUTTON_GOLF_SELECT                    = $18000402; (* cycle between: club / swing strength / ball arc / ball spin *)
  5318.   {$EXTERNALSYM DIBUTTON_GOLF_SELECT}
  5319.   DIBUTTON_GOLF_UP                        = $18000403; (* increase selection *)
  5320.   {$EXTERNALSYM DIBUTTON_GOLF_UP}
  5321.   DIBUTTON_GOLF_DOWN                      = $18000404; (* decrease selection *)
  5322.   {$EXTERNALSYM DIBUTTON_GOLF_DOWN}
  5323.   DIBUTTON_GOLF_TERRAIN                   = $18000405; (* shows terrain detail *)
  5324.   {$EXTERNALSYM DIBUTTON_GOLF_TERRAIN}
  5325.   DIBUTTON_GOLF_FLYBY                     = $18000406; (* view the hole via a flyby *)
  5326.   {$EXTERNALSYM DIBUTTON_GOLF_FLYBY}
  5327.   DIBUTTON_GOLF_MENU                      = $180004FD; (* Show menu options *)
  5328.   {$EXTERNALSYM DIBUTTON_GOLF_MENU}
  5329. (*--- Priority 2 controls                            ---*)
  5330.  
  5331.   DIHATSWITCH_GOLF_SCROLL                 = $18004601; (* scroll view *)
  5332.   {$EXTERNALSYM DIHATSWITCH_GOLF_SCROLL}
  5333.   DIBUTTON_GOLF_ZOOM                      = $18004407; (* Zoom view in / out *)
  5334.   {$EXTERNALSYM DIBUTTON_GOLF_ZOOM}
  5335.   DIBUTTON_GOLF_TIMEOUT                   = $18004408; (* Call for time out *)
  5336.   {$EXTERNALSYM DIBUTTON_GOLF_TIMEOUT}
  5337.   DIBUTTON_GOLF_SUBSTITUTE                = $18004409; (* substitute one player for another *)
  5338.   {$EXTERNALSYM DIBUTTON_GOLF_SUBSTITUTE}
  5339.   DIBUTTON_GOLF_LEFT_LINK                 = $1800C4E4; (* Fallback sidestep left button *)
  5340.   {$EXTERNALSYM DIBUTTON_GOLF_LEFT_LINK}
  5341.   DIBUTTON_GOLF_RIGHT_LINK                = $1800C4EC; (* Fallback sidestep right button *)
  5342.   {$EXTERNALSYM DIBUTTON_GOLF_RIGHT_LINK}
  5343.   DIBUTTON_GOLF_FORWARD_LINK              = $180144E0; (* Fallback move forward button *)
  5344.   {$EXTERNALSYM DIBUTTON_GOLF_FORWARD_LINK}
  5345.   DIBUTTON_GOLF_BACK_LINK                 = $180144E8; (* Fallback move back button *)
  5346.   {$EXTERNALSYM DIBUTTON_GOLF_BACK_LINK}
  5347.   DIBUTTON_GOLF_DEVICE                    = $180044FE; (* Show input device and controls *)
  5348.   {$EXTERNALSYM DIBUTTON_GOLF_DEVICE}
  5349.   DIBUTTON_GOLF_PAUSE                     = $180044FC; (* Start / Pause / Restart game *)
  5350.   {$EXTERNALSYM DIBUTTON_GOLF_PAUSE}
  5351.  
  5352. (*--- Sports - Hockey - Offense
  5353.       Offense       ---*)
  5354.   DIVIRTUAL_SPORTS_HOCKEY_OFFENSE         = $19000000;
  5355.   {$EXTERNALSYM DIVIRTUAL_SPORTS_HOCKEY_OFFENSE}
  5356.   DIAXIS_HOCKEYO_LATERAL                  = $19008201; (* Move / Aim: left / right *)
  5357.   {$EXTERNALSYM DIAXIS_HOCKEYO_LATERAL}
  5358.   DIAXIS_HOCKEYO_MOVE                     = $19010202; (* Move / Aim: up / down *)
  5359.   {$EXTERNALSYM DIAXIS_HOCKEYO_MOVE}
  5360.   DIBUTTON_HOCKEYO_SHOOT                  = $19000401; (* Shoot *)
  5361.   {$EXTERNALSYM DIBUTTON_HOCKEYO_SHOOT}
  5362.   DIBUTTON_HOCKEYO_PASS                   = $19000402; (* pass the puck *)
  5363.   {$EXTERNALSYM DIBUTTON_HOCKEYO_PASS}
  5364.   DIBUTTON_HOCKEYO_BURST                  = $19000403; (* invoke speed burst *)
  5365.   {$EXTERNALSYM DIBUTTON_HOCKEYO_BURST}
  5366.   DIBUTTON_HOCKEYO_SPECIAL                = $19000404; (* invoke special move *)
  5367.   {$EXTERNALSYM DIBUTTON_HOCKEYO_SPECIAL}
  5368.   DIBUTTON_HOCKEYO_FAKE                   = $19000405; (* hold down to fake pass or kick *)
  5369.   {$EXTERNALSYM DIBUTTON_HOCKEYO_FAKE}
  5370.   DIBUTTON_HOCKEYO_MENU                   = $190004FD; (* Show menu options *)
  5371.   {$EXTERNALSYM DIBUTTON_HOCKEYO_MENU}
  5372. (*--- Priority 2 controls                            ---*)
  5373.  
  5374.   DIHATSWITCH_HOCKEYO_SCROLL              = $19004601; (* scroll view *)
  5375.   {$EXTERNALSYM DIHATSWITCH_HOCKEYO_SCROLL}
  5376.   DIBUTTON_HOCKEYO_ZOOM                   = $19004406; (* Zoom view in / out *)
  5377.   {$EXTERNALSYM DIBUTTON_HOCKEYO_ZOOM}
  5378.   DIBUTTON_HOCKEYO_STRATEGY               = $19004407; (* Invoke coaching menu for strategy help *)
  5379.   {$EXTERNALSYM DIBUTTON_HOCKEYO_STRATEGY}
  5380.   DIBUTTON_HOCKEYO_TIMEOUT                = $19004408; (* Call for time out *)
  5381.   {$EXTERNALSYM DIBUTTON_HOCKEYO_TIMEOUT}
  5382.   DIBUTTON_HOCKEYO_SUBSTITUTE             = $19004409; (* substitute one player for another *)
  5383.   {$EXTERNALSYM DIBUTTON_HOCKEYO_SUBSTITUTE}
  5384.   DIBUTTON_HOCKEYO_LEFT_LINK              = $1900C4E4; (* Fallback sidestep left button *)
  5385.   {$EXTERNALSYM DIBUTTON_HOCKEYO_LEFT_LINK}
  5386.   DIBUTTON_HOCKEYO_RIGHT_LINK             = $1900C4EC; (* Fallback sidestep right button *)
  5387.   {$EXTERNALSYM DIBUTTON_HOCKEYO_RIGHT_LINK}
  5388.   DIBUTTON_HOCKEYO_FORWARD_LINK           = $190144E0; (* Fallback move forward button *)
  5389.   {$EXTERNALSYM DIBUTTON_HOCKEYO_FORWARD_LINK}
  5390.   DIBUTTON_HOCKEYO_BACK_LINK              = $190144E8; (* Fallback move back button *)
  5391.   {$EXTERNALSYM DIBUTTON_HOCKEYO_BACK_LINK}
  5392.   DIBUTTON_HOCKEYO_DEVICE                 = $190044FE; (* Show input device and controls *)
  5393.   {$EXTERNALSYM DIBUTTON_HOCKEYO_DEVICE}
  5394.   DIBUTTON_HOCKEYO_PAUSE                  = $190044FC; (* Start / Pause / Restart game *)
  5395.   {$EXTERNALSYM DIBUTTON_HOCKEYO_PAUSE}
  5396.  
  5397. (*--- Sports - Hockey - Defense
  5398.       Defense       ---*)
  5399.   DIVIRTUAL_SPORTS_HOCKEY_DEFENSE         = $1A000000;
  5400.   {$EXTERNALSYM DIVIRTUAL_SPORTS_HOCKEY_DEFENSE}
  5401.   DIAXIS_HOCKEYD_LATERAL                  = $1A008201; (* Move / Aim: left / right *)
  5402.   {$EXTERNALSYM DIAXIS_HOCKEYD_LATERAL}
  5403.   DIAXIS_HOCKEYD_MOVE                     = $1A010202; (* Move / Aim: up / down *)
  5404.   {$EXTERNALSYM DIAXIS_HOCKEYD_MOVE}
  5405.   DIBUTTON_HOCKEYD_PLAYER                 = $1A000401; (* control player closest to the puck *)
  5406.   {$EXTERNALSYM DIBUTTON_HOCKEYD_PLAYER}
  5407.   DIBUTTON_HOCKEYD_STEAL                  = $1A000402; (* attempt steal *)
  5408.   {$EXTERNALSYM DIBUTTON_HOCKEYD_STEAL}
  5409.   DIBUTTON_HOCKEYD_BURST                  = $1A000403; (* speed burst or body check *)
  5410.   {$EXTERNALSYM DIBUTTON_HOCKEYD_BURST}
  5411.   DIBUTTON_HOCKEYD_BLOCK                  = $1A000404; (* block puck *)
  5412.   {$EXTERNALSYM DIBUTTON_HOCKEYD_BLOCK}
  5413.   DIBUTTON_HOCKEYD_FAKE                   = $1A000405; (* hold down to fake tackle or intercept *)
  5414.   {$EXTERNALSYM DIBUTTON_HOCKEYD_FAKE}
  5415.   DIBUTTON_HOCKEYD_MENU                   = $1A0004FD; (* Show menu options *)
  5416.   {$EXTERNALSYM DIBUTTON_HOCKEYD_MENU}
  5417. (*--- Priority 2 controls                            ---*)
  5418.  
  5419.   DIHATSWITCH_HOCKEYD_SCROLL              = $1A004601; (* scroll view *)
  5420.   {$EXTERNALSYM DIHATSWITCH_HOCKEYD_SCROLL}
  5421.   DIBUTTON_HOCKEYD_ZOOM                   = $1A004406; (* Zoom view in / out *)
  5422.   {$EXTERNALSYM DIBUTTON_HOCKEYD_ZOOM}
  5423.   DIBUTTON_HOCKEYD_STRATEGY               = $1A004407; (* Invoke coaching menu for strategy help *)
  5424.   {$EXTERNALSYM DIBUTTON_HOCKEYD_STRATEGY}
  5425.   DIBUTTON_HOCKEYD_TIMEOUT                = $1A004408; (* Call for time out *)
  5426.   {$EXTERNALSYM DIBUTTON_HOCKEYD_TIMEOUT}
  5427.   DIBUTTON_HOCKEYD_SUBSTITUTE             = $1A004409; (* substitute one player for another *)
  5428.   {$EXTERNALSYM DIBUTTON_HOCKEYD_SUBSTITUTE}
  5429.   DIBUTTON_HOCKEYD_LEFT_LINK              = $1A00C4E4; (* Fallback sidestep left button *)
  5430.   {$EXTERNALSYM DIBUTTON_HOCKEYD_LEFT_LINK}
  5431.   DIBUTTON_HOCKEYD_RIGHT_LINK             = $1A00C4EC; (* Fallback sidestep right button *)
  5432.   {$EXTERNALSYM DIBUTTON_HOCKEYD_RIGHT_LINK}
  5433.   DIBUTTON_HOCKEYD_FORWARD_LINK           = $1A0144E0; (* Fallback move forward button *)
  5434.   {$EXTERNALSYM DIBUTTON_HOCKEYD_FORWARD_LINK}
  5435.   DIBUTTON_HOCKEYD_BACK_LINK              = $1A0144E8; (* Fallback move back button *)
  5436.   {$EXTERNALSYM DIBUTTON_HOCKEYD_BACK_LINK}
  5437.   DIBUTTON_HOCKEYD_DEVICE                 = $1A0044FE; (* Show input device and controls *)
  5438.   {$EXTERNALSYM DIBUTTON_HOCKEYD_DEVICE}
  5439.   DIBUTTON_HOCKEYD_PAUSE                  = $1A0044FC; (* Start / Pause / Restart game *)
  5440.   {$EXTERNALSYM DIBUTTON_HOCKEYD_PAUSE}
  5441.  
  5442. (*--- Sports - Hockey - Goalie
  5443.       Goal tending  ---*)
  5444.   DIVIRTUAL_SPORTS_HOCKEY_GOALIE          = $1B000000;
  5445.   {$EXTERNALSYM DIVIRTUAL_SPORTS_HOCKEY_GOALIE}
  5446.   DIAXIS_HOCKEYG_LATERAL                  = $1B008201; (* Move / Aim: left / right *)
  5447.   {$EXTERNALSYM DIAXIS_HOCKEYG_LATERAL}
  5448.   DIAXIS_HOCKEYG_MOVE                     = $1B010202; (* Move / Aim: up / down *)
  5449.   {$EXTERNALSYM DIAXIS_HOCKEYG_MOVE}
  5450.   DIBUTTON_HOCKEYG_PASS                   = $1B000401; (* pass puck *)
  5451.   {$EXTERNALSYM DIBUTTON_HOCKEYG_PASS}
  5452.   DIBUTTON_HOCKEYG_POKE                   = $1B000402; (* poke / check / hack *)
  5453.   {$EXTERNALSYM DIBUTTON_HOCKEYG_POKE}
  5454.   DIBUTTON_HOCKEYG_STEAL                  = $1B000403; (* attempt steal *)
  5455.   {$EXTERNALSYM DIBUTTON_HOCKEYG_STEAL}
  5456.   DIBUTTON_HOCKEYG_BLOCK                  = $1B000404; (* block puck *)
  5457.   {$EXTERNALSYM DIBUTTON_HOCKEYG_BLOCK}
  5458.   DIBUTTON_HOCKEYG_MENU                   = $1B0004FD; (* Show menu options *)
  5459.   {$EXTERNALSYM DIBUTTON_HOCKEYG_MENU}
  5460. (*--- Priority 2 controls                            ---*)
  5461.  
  5462.   DIHATSWITCH_HOCKEYG_SCROLL              = $1B004601; (* scroll view *)
  5463.   {$EXTERNALSYM DIHATSWITCH_HOCKEYG_SCROLL}
  5464.   DIBUTTON_HOCKEYG_ZOOM                   = $1B004405; (* Zoom view in / out *)
  5465.   {$EXTERNALSYM DIBUTTON_HOCKEYG_ZOOM}
  5466.   DIBUTTON_HOCKEYG_STRATEGY               = $1B004406; (* Invoke coaching menu for strategy help *)
  5467.   {$EXTERNALSYM DIBUTTON_HOCKEYG_STRATEGY}
  5468.   DIBUTTON_HOCKEYG_TIMEOUT                = $1B004407; (* Call for time out *)
  5469.   {$EXTERNALSYM DIBUTTON_HOCKEYG_TIMEOUT}
  5470.   DIBUTTON_HOCKEYG_SUBSTITUTE             = $1B004408; (* substitute one player for another *)
  5471.   {$EXTERNALSYM DIBUTTON_HOCKEYG_SUBSTITUTE}
  5472.   DIBUTTON_HOCKEYG_LEFT_LINK              = $1B00C4E4; (* Fallback sidestep left button *)
  5473.   {$EXTERNALSYM DIBUTTON_HOCKEYG_LEFT_LINK}
  5474.   DIBUTTON_HOCKEYG_RIGHT_LINK             = $1B00C4EC; (* Fallback sidestep right button *)
  5475.   {$EXTERNALSYM DIBUTTON_HOCKEYG_RIGHT_LINK}
  5476.   DIBUTTON_HOCKEYG_FORWARD_LINK           = $1B0144E0; (* Fallback move forward button *)
  5477.   {$EXTERNALSYM DIBUTTON_HOCKEYG_FORWARD_LINK}
  5478.   DIBUTTON_HOCKEYG_BACK_LINK              = $1B0144E8; (* Fallback move back button *)
  5479.   {$EXTERNALSYM DIBUTTON_HOCKEYG_BACK_LINK}
  5480.   DIBUTTON_HOCKEYG_DEVICE                 = $1B0044FE; (* Show input device and controls *)
  5481.   {$EXTERNALSYM DIBUTTON_HOCKEYG_DEVICE}
  5482.   DIBUTTON_HOCKEYG_PAUSE                  = $1B0044FC; (* Start / Pause / Restart game *)
  5483.   {$EXTERNALSYM DIBUTTON_HOCKEYG_PAUSE}
  5484.  
  5485. (*--- Sports - Mountain Biking
  5486.                      ---*)
  5487.   DIVIRTUAL_SPORTS_BIKING_MOUNTAIN        = $1C000000;
  5488.   {$EXTERNALSYM DIVIRTUAL_SPORTS_BIKING_MOUNTAIN}
  5489.   DIAXIS_BIKINGM_TURN                     = $1C008201; (* left / right *)
  5490.   {$EXTERNALSYM DIAXIS_BIKINGM_TURN}
  5491.   DIAXIS_BIKINGM_PEDAL                    = $1C010202; (* Pedal faster / slower / brake *)
  5492.   {$EXTERNALSYM DIAXIS_BIKINGM_PEDAL}
  5493.   DIBUTTON_BIKINGM_JUMP                   = $1C000401; (* jump over obstacle *)
  5494.   {$EXTERNALSYM DIBUTTON_BIKINGM_JUMP}
  5495.   DIBUTTON_BIKINGM_CAMERA                 = $1C000402; (* switch camera view *)
  5496.   {$EXTERNALSYM DIBUTTON_BIKINGM_CAMERA}
  5497.   DIBUTTON_BIKINGM_SPECIAL1               = $1C000403; (* perform first special move *)
  5498.   {$EXTERNALSYM DIBUTTON_BIKINGM_SPECIAL1}
  5499.   DIBUTTON_BIKINGM_SELECT                 = $1C000404; (* Select *)
  5500.   {$EXTERNALSYM DIBUTTON_BIKINGM_SELECT}
  5501.   DIBUTTON_BIKINGM_SPECIAL2               = $1C000405; (* perform second special move *)
  5502.   {$EXTERNALSYM DIBUTTON_BIKINGM_SPECIAL2}
  5503.   DIBUTTON_BIKINGM_MENU                   = $1C0004FD; (* Show menu options *)
  5504.   {$EXTERNALSYM DIBUTTON_BIKINGM_MENU}
  5505. (*--- Priority 2 controls                            ---*)
  5506.  
  5507.   DIHATSWITCH_BIKINGM_SCROLL              = $1C004601; (* scroll view *)
  5508.   {$EXTERNALSYM DIHATSWITCH_BIKINGM_SCROLL}
  5509.   DIBUTTON_BIKINGM_ZOOM                   = $1C004406; (* Zoom view in / out *)
  5510.   {$EXTERNALSYM DIBUTTON_BIKINGM_ZOOM}
  5511.   DIAXIS_BIKINGM_BRAKE                    = $1C044203; (* Brake axis  *)
  5512.   {$EXTERNALSYM DIAXIS_BIKINGM_BRAKE}
  5513.   DIBUTTON_BIKINGM_LEFT_LINK              = $1C00C4E4; (* Fallback turn left button *)
  5514.   {$EXTERNALSYM DIBUTTON_BIKINGM_LEFT_LINK}
  5515.   DIBUTTON_BIKINGM_RIGHT_LINK             = $1C00C4EC; (* Fallback turn right button *)
  5516.   {$EXTERNALSYM DIBUTTON_BIKINGM_RIGHT_LINK}
  5517.   DIBUTTON_BIKINGM_FASTER_LINK            = $1C0144E0; (* Fallback pedal faster button *)
  5518.   {$EXTERNALSYM DIBUTTON_BIKINGM_FASTER_LINK}
  5519.   DIBUTTON_BIKINGM_SLOWER_LINK            = $1C0144E8; (* Fallback pedal slower button *)
  5520.   {$EXTERNALSYM DIBUTTON_BIKINGM_SLOWER_LINK}
  5521.   DIBUTTON_BIKINGM_BRAKE_BUTTON_LINK      = $1C0444E8; (* Fallback brake button *)
  5522.   {$EXTERNALSYM DIBUTTON_BIKINGM_BRAKE_BUTTON_LINK}
  5523.   DIBUTTON_BIKINGM_DEVICE                 = $1C0044FE; (* Show input device and controls *)
  5524.   {$EXTERNALSYM DIBUTTON_BIKINGM_DEVICE}
  5525.   DIBUTTON_BIKINGM_PAUSE                  = $1C0044FC; (* Start / Pause / Restart game *)
  5526.   {$EXTERNALSYM DIBUTTON_BIKINGM_PAUSE}
  5527.  
  5528. (*--- Sports: Skiing / Snowboarding / Skateboarding
  5529.         ---*)
  5530.   DIVIRTUAL_SPORTS_SKIING                 = $1D000000;
  5531.   {$EXTERNALSYM DIVIRTUAL_SPORTS_SKIING}
  5532.   DIAXIS_SKIING_TURN                      = $1D008201; (* left / right *)
  5533.   {$EXTERNALSYM DIAXIS_SKIING_TURN}
  5534.   DIAXIS_SKIING_SPEED                     = $1D010202; (* faster / slower *)
  5535.   {$EXTERNALSYM DIAXIS_SKIING_SPEED}
  5536.   DIBUTTON_SKIING_JUMP                    = $1D000401; (* Jump *)
  5537.   {$EXTERNALSYM DIBUTTON_SKIING_JUMP}
  5538.   DIBUTTON_SKIING_CROUCH                  = $1D000402; (* crouch down *)
  5539.   {$EXTERNALSYM DIBUTTON_SKIING_CROUCH}
  5540.   DIBUTTON_SKIING_CAMERA                  = $1D000403; (* switch camera view *)
  5541.   {$EXTERNALSYM DIBUTTON_SKIING_CAMERA}
  5542.   DIBUTTON_SKIING_SPECIAL1                = $1D000404; (* perform first special move *)
  5543.   {$EXTERNALSYM DIBUTTON_SKIING_SPECIAL1}
  5544.   DIBUTTON_SKIING_SELECT                  = $1D000405; (* Select *)
  5545.   {$EXTERNALSYM DIBUTTON_SKIING_SELECT}
  5546.   DIBUTTON_SKIING_SPECIAL2                = $1D000406; (* perform second special move *)
  5547.   {$EXTERNALSYM DIBUTTON_SKIING_SPECIAL2}
  5548.   DIBUTTON_SKIING_MENU                    = $1D0004FD; (* Show menu options *)
  5549.   {$EXTERNALSYM DIBUTTON_SKIING_MENU}
  5550. (*--- Priority 2 controls                            ---*)
  5551.  
  5552.   DIHATSWITCH_SKIING_GLANCE               = $1D004601; (* scroll view *)
  5553.   {$EXTERNALSYM DIHATSWITCH_SKIING_GLANCE}
  5554.   DIBUTTON_SKIING_ZOOM                    = $1D004407; (* Zoom view in / out *)
  5555.   {$EXTERNALSYM DIBUTTON_SKIING_ZOOM}
  5556.   DIBUTTON_SKIING_LEFT_LINK               = $1D00C4E4; (* Fallback turn left button *)
  5557.   {$EXTERNALSYM DIBUTTON_SKIING_LEFT_LINK}
  5558.   DIBUTTON_SKIING_RIGHT_LINK              = $1D00C4EC; (* Fallback turn right button *)
  5559.   {$EXTERNALSYM DIBUTTON_SKIING_RIGHT_LINK}
  5560.   DIBUTTON_SKIING_FASTER_LINK             = $1D0144E0; (* Fallback increase speed button *)
  5561.   {$EXTERNALSYM DIBUTTON_SKIING_FASTER_LINK}
  5562.   DIBUTTON_SKIING_SLOWER_LINK             = $1D0144E8; (* Fallback decrease speed button *)
  5563.   {$EXTERNALSYM DIBUTTON_SKIING_SLOWER_LINK}
  5564.   DIBUTTON_SKIING_DEVICE                  = $1D0044FE; (* Show input device and controls *)
  5565.   {$EXTERNALSYM DIBUTTON_SKIING_DEVICE}
  5566.   DIBUTTON_SKIING_PAUSE                   = $1D0044FC; (* Start / Pause / Restart game *)
  5567.   {$EXTERNALSYM DIBUTTON_SKIING_PAUSE}
  5568.  
  5569. (*--- Sports - Soccer - Offense
  5570.       Offense       ---*)
  5571.   DIVIRTUAL_SPORTS_SOCCER_OFFENSE         = $1E000000;
  5572.   {$EXTERNALSYM DIVIRTUAL_SPORTS_SOCCER_OFFENSE}
  5573.   DIAXIS_SOCCERO_LATERAL                  = $1E008201; (* Move / Aim: left / right *)
  5574.   {$EXTERNALSYM DIAXIS_SOCCERO_LATERAL}
  5575.   DIAXIS_SOCCERO_MOVE                     = $1E010202; (* Move / Aim: up / down *)
  5576.   {$EXTERNALSYM DIAXIS_SOCCERO_MOVE}
  5577.   DIAXIS_SOCCERO_BEND                     = $1E018203; (* Bend to soccer shot/pass *)
  5578.   {$EXTERNALSYM DIAXIS_SOCCERO_BEND}
  5579.   DIBUTTON_SOCCERO_SHOOT                  = $1E000401; (* Shoot the ball *)
  5580.   {$EXTERNALSYM DIBUTTON_SOCCERO_SHOOT}
  5581.   DIBUTTON_SOCCERO_PASS                   = $1E000402; (* Pass  *)
  5582.   {$EXTERNALSYM DIBUTTON_SOCCERO_PASS}
  5583.   DIBUTTON_SOCCERO_FAKE                   = $1E000403; (* Fake *)
  5584.   {$EXTERNALSYM DIBUTTON_SOCCERO_FAKE}
  5585.   DIBUTTON_SOCCERO_PLAYER                 = $1E000404; (* Select next player *)
  5586.   {$EXTERNALSYM DIBUTTON_SOCCERO_PLAYER}
  5587.   DIBUTTON_SOCCERO_SPECIAL1               = $1E000405; (* Apply special move *)
  5588.   {$EXTERNALSYM DIBUTTON_SOCCERO_SPECIAL1}
  5589.   DIBUTTON_SOCCERO_SELECT                 = $1E000406; (* Select special move *)
  5590.   {$EXTERNALSYM DIBUTTON_SOCCERO_SELECT}
  5591.   DIBUTTON_SOCCERO_MENU                   = $1E0004FD; (* Show menu options *)
  5592.   {$EXTERNALSYM DIBUTTON_SOCCERO_MENU}
  5593. (*--- Priority 2 controls                            ---*)
  5594.  
  5595.   DIHATSWITCH_SOCCERO_GLANCE              = $1E004601; (* scroll view *)
  5596.   {$EXTERNALSYM DIHATSWITCH_SOCCERO_GLANCE}
  5597.   DIBUTTON_SOCCERO_SUBSTITUTE             = $1E004407; (* Substitute one player for another *)
  5598.   {$EXTERNALSYM DIBUTTON_SOCCERO_SUBSTITUTE}
  5599.   DIBUTTON_SOCCERO_SHOOTLOW               = $1E004408; (* Shoot the ball low *)
  5600.   {$EXTERNALSYM DIBUTTON_SOCCERO_SHOOTLOW}
  5601.   DIBUTTON_SOCCERO_SHOOTHIGH              = $1E004409; (* Shoot the ball high *)
  5602.   {$EXTERNALSYM DIBUTTON_SOCCERO_SHOOTHIGH}
  5603.   DIBUTTON_SOCCERO_PASSTHRU               = $1E00440A; (* Make a thru pass *)
  5604.   {$EXTERNALSYM DIBUTTON_SOCCERO_PASSTHRU}
  5605.   DIBUTTON_SOCCERO_SPRINT                 = $1E00440B; (* Sprint / turbo boost *)
  5606.   {$EXTERNALSYM DIBUTTON_SOCCERO_SPRINT}
  5607.   DIBUTTON_SOCCERO_CONTROL                = $1E00440C; (* Obtain control of the ball *)
  5608.   {$EXTERNALSYM DIBUTTON_SOCCERO_CONTROL}
  5609.   DIBUTTON_SOCCERO_HEAD                   = $1E00440D; (* Attempt to head the ball *)
  5610.   {$EXTERNALSYM DIBUTTON_SOCCERO_HEAD}
  5611.   DIBUTTON_SOCCERO_LEFT_LINK              = $1E00C4E4; (* Fallback sidestep left button *)
  5612.   {$EXTERNALSYM DIBUTTON_SOCCERO_LEFT_LINK}
  5613.   DIBUTTON_SOCCERO_RIGHT_LINK             = $1E00C4EC; (* Fallback sidestep right button *)
  5614.   {$EXTERNALSYM DIBUTTON_SOCCERO_RIGHT_LINK}
  5615.   DIBUTTON_SOCCERO_FORWARD_LINK           = $1E0144E0; (* Fallback move forward button *)
  5616.   {$EXTERNALSYM DIBUTTON_SOCCERO_FORWARD_LINK}
  5617.   DIBUTTON_SOCCERO_BACK_LINK              = $1E0144E8; (* Fallback move back button *)
  5618.   {$EXTERNALSYM DIBUTTON_SOCCERO_BACK_LINK}
  5619.   DIBUTTON_SOCCERO_DEVICE                 = $1E0044FE; (* Show input device and controls *)
  5620.   {$EXTERNALSYM DIBUTTON_SOCCERO_DEVICE}
  5621.   DIBUTTON_SOCCERO_PAUSE                  = $1E0044FC; (* Start / Pause / Restart game *)
  5622.   {$EXTERNALSYM DIBUTTON_SOCCERO_PAUSE}
  5623.  
  5624. (*--- Sports - Soccer - Defense
  5625.       Defense       ---*)
  5626.   DIVIRTUAL_SPORTS_SOCCER_DEFENSE         = $1F000000;
  5627.   {$EXTERNALSYM DIVIRTUAL_SPORTS_SOCCER_DEFENSE}
  5628.   DIAXIS_SOCCERD_LATERAL                  = $1F008201; (* Move / Aim: left / right *)
  5629.   {$EXTERNALSYM DIAXIS_SOCCERD_LATERAL}
  5630.   DIAXIS_SOCCERD_MOVE                     = $1F010202; (* Move / Aim: up / down *)
  5631.   {$EXTERNALSYM DIAXIS_SOCCERD_MOVE}
  5632.   DIBUTTON_SOCCERD_BLOCK                  = $1F000401; (* Attempt to block shot *)
  5633.   {$EXTERNALSYM DIBUTTON_SOCCERD_BLOCK}
  5634.   DIBUTTON_SOCCERD_STEAL                  = $1F000402; (* Attempt to steal ball *)
  5635.   {$EXTERNALSYM DIBUTTON_SOCCERD_STEAL}
  5636.   DIBUTTON_SOCCERD_FAKE                   = $1F000403; (* Fake a block or a steal *)
  5637.   {$EXTERNALSYM DIBUTTON_SOCCERD_FAKE}
  5638.   DIBUTTON_SOCCERD_PLAYER                 = $1F000404; (* Select next player *)
  5639.   {$EXTERNALSYM DIBUTTON_SOCCERD_PLAYER}
  5640.   DIBUTTON_SOCCERD_SPECIAL                = $1F000405; (* Apply special move *)
  5641.   {$EXTERNALSYM DIBUTTON_SOCCERD_SPECIAL}
  5642.   DIBUTTON_SOCCERD_SELECT                 = $1F000406; (* Select special move *)
  5643.   {$EXTERNALSYM DIBUTTON_SOCCERD_SELECT}
  5644.   DIBUTTON_SOCCERD_SLIDE                  = $1F000407; (* Attempt a slide tackle *)
  5645.   {$EXTERNALSYM DIBUTTON_SOCCERD_SLIDE}
  5646.   DIBUTTON_SOCCERD_MENU                   = $1F0004FD; (* Show menu options *)
  5647.   {$EXTERNALSYM DIBUTTON_SOCCERD_MENU}
  5648. (*--- Priority 2 controls                            ---*)
  5649.  
  5650.   DIHATSWITCH_SOCCERD_GLANCE              = $1F004601; (* scroll view *)
  5651.   {$EXTERNALSYM DIHATSWITCH_SOCCERD_GLANCE}
  5652.   DIBUTTON_SOCCERD_FOUL                   = $1F004408; (* Initiate a foul / hard-foul *)
  5653.   {$EXTERNALSYM DIBUTTON_SOCCERD_FOUL}
  5654.   DIBUTTON_SOCCERD_HEAD                   = $1F004409; (* Attempt a Header *)
  5655.   {$EXTERNALSYM DIBUTTON_SOCCERD_HEAD}
  5656.   DIBUTTON_SOCCERD_CLEAR                  = $1F00440A; (* Attempt to clear the ball down the field *)
  5657.   {$EXTERNALSYM DIBUTTON_SOCCERD_CLEAR}
  5658.   DIBUTTON_SOCCERD_GOALIECHARGE           = $1F00440B; (* Make the goalie charge out of the box *)
  5659.   {$EXTERNALSYM DIBUTTON_SOCCERD_GOALIECHARGE}
  5660.   DIBUTTON_SOCCERD_SUBSTITUTE             = $1F00440C; (* Substitute one player for another *)
  5661.   {$EXTERNALSYM DIBUTTON_SOCCERD_SUBSTITUTE}
  5662.   DIBUTTON_SOCCERD_LEFT_LINK              = $1F00C4E4; (* Fallback sidestep left button *)
  5663.   {$EXTERNALSYM DIBUTTON_SOCCERD_LEFT_LINK}
  5664.   DIBUTTON_SOCCERD_RIGHT_LINK             = $1F00C4EC; (* Fallback sidestep right button *)
  5665.   {$EXTERNALSYM DIBUTTON_SOCCERD_RIGHT_LINK}
  5666.   DIBUTTON_SOCCERD_FORWARD_LINK           = $1F0144E0; (* Fallback move forward button *)
  5667.   {$EXTERNALSYM DIBUTTON_SOCCERD_FORWARD_LINK}
  5668.   DIBUTTON_SOCCERD_BACK_LINK              = $1F0144E8; (* Fallback move back button *)
  5669.   {$EXTERNALSYM DIBUTTON_SOCCERD_BACK_LINK}
  5670.   DIBUTTON_SOCCERD_DEVICE                 = $1F0044FE; (* Show input device and controls *)
  5671.   {$EXTERNALSYM DIBUTTON_SOCCERD_DEVICE}
  5672.   DIBUTTON_SOCCERD_PAUSE                  = $1F0044FC; (* Start / Pause / Restart game *)
  5673.   {$EXTERNALSYM DIBUTTON_SOCCERD_PAUSE}
  5674.  
  5675. (*--- Sports - Racquet
  5676.       Tennis - Table-Tennis - Squash   ---*)
  5677.   DIVIRTUAL_SPORTS_RACQUET                = $20000000;
  5678.   {$EXTERNALSYM DIVIRTUAL_SPORTS_RACQUET}
  5679.   DIAXIS_RACQUET_LATERAL                  = $20008201; (* Move / Aim: left / right *)
  5680.   {$EXTERNALSYM DIAXIS_RACQUET_LATERAL}
  5681.   DIAXIS_RACQUET_MOVE                     = $20010202; (* Move / Aim: up / down *)
  5682.   {$EXTERNALSYM DIAXIS_RACQUET_MOVE}
  5683.   DIBUTTON_RACQUET_SWING                  = $20000401; (* Swing racquet *)
  5684.   {$EXTERNALSYM DIBUTTON_RACQUET_SWING}
  5685.   DIBUTTON_RACQUET_BACKSWING              = $20000402; (* Swing backhand *)
  5686.   {$EXTERNALSYM DIBUTTON_RACQUET_BACKSWING}
  5687.   DIBUTTON_RACQUET_SMASH                  = $20000403; (* Smash shot *)
  5688.   {$EXTERNALSYM DIBUTTON_RACQUET_SMASH}
  5689.   DIBUTTON_RACQUET_SPECIAL                = $20000404; (* Special shot *)
  5690.   {$EXTERNALSYM DIBUTTON_RACQUET_SPECIAL}
  5691.   DIBUTTON_RACQUET_SELECT                 = $20000405; (* Select special shot *)
  5692.   {$EXTERNALSYM DIBUTTON_RACQUET_SELECT}
  5693.   DIBUTTON_RACQUET_MENU                   = $200004FD; (* Show menu options *)
  5694.   {$EXTERNALSYM DIBUTTON_RACQUET_MENU}
  5695. (*--- Priority 2 controls                            ---*)
  5696.  
  5697.   DIHATSWITCH_RACQUET_GLANCE              = $20004601; (* scroll view *)
  5698.   {$EXTERNALSYM DIHATSWITCH_RACQUET_GLANCE}
  5699.   DIBUTTON_RACQUET_TIMEOUT                = $20004406; (* Call for time out *)
  5700.   {$EXTERNALSYM DIBUTTON_RACQUET_TIMEOUT}
  5701.   DIBUTTON_RACQUET_SUBSTITUTE             = $20004407; (* Substitute one player for another *)
  5702.   {$EXTERNALSYM DIBUTTON_RACQUET_SUBSTITUTE}
  5703.   DIBUTTON_RACQUET_LEFT_LINK              = $2000C4E4; (* Fallback sidestep left button *)
  5704.   {$EXTERNALSYM DIBUTTON_RACQUET_LEFT_LINK}
  5705.   DIBUTTON_RACQUET_RIGHT_LINK             = $2000C4EC; (* Fallback sidestep right button *)
  5706.   {$EXTERNALSYM DIBUTTON_RACQUET_RIGHT_LINK}
  5707.   DIBUTTON_RACQUET_FORWARD_LINK           = $200144E0; (* Fallback move forward button *)
  5708.   {$EXTERNALSYM DIBUTTON_RACQUET_FORWARD_LINK}
  5709.   DIBUTTON_RACQUET_BACK_LINK              = $200144E8; (* Fallback move back button *)
  5710.   {$EXTERNALSYM DIBUTTON_RACQUET_BACK_LINK}
  5711.   DIBUTTON_RACQUET_DEVICE                 = $200044FE; (* Show input device and controls *)
  5712.   {$EXTERNALSYM DIBUTTON_RACQUET_DEVICE}
  5713.   DIBUTTON_RACQUET_PAUSE                  = $200044FC; (* Start / Pause / Restart game *)
  5714.   {$EXTERNALSYM DIBUTTON_RACQUET_PAUSE}
  5715.  
  5716. (*--- Arcade- 2D
  5717.       Side to Side movement        ---*)
  5718.   DIVIRTUAL_ARCADE_SIDE2SIDE              = $21000000;
  5719.   {$EXTERNALSYM DIVIRTUAL_ARCADE_SIDE2SIDE}
  5720.   DIAXIS_ARCADES_LATERAL                  = $21008201; (* left / right *)
  5721.   {$EXTERNALSYM DIAXIS_ARCADES_LATERAL}
  5722.   DIAXIS_ARCADES_MOVE                     = $21010202; (* up / down *)
  5723.   {$EXTERNALSYM DIAXIS_ARCADES_MOVE}
  5724.   DIBUTTON_ARCADES_THROW                  = $21000401; (* throw object *)
  5725.   {$EXTERNALSYM DIBUTTON_ARCADES_THROW}
  5726.   DIBUTTON_ARCADES_CARRY                  = $21000402; (* carry object *)
  5727.   {$EXTERNALSYM DIBUTTON_ARCADES_CARRY}
  5728.   DIBUTTON_ARCADES_ATTACK                 = $21000403; (* attack *)
  5729.   {$EXTERNALSYM DIBUTTON_ARCADES_ATTACK}
  5730.   DIBUTTON_ARCADES_SPECIAL                = $21000404; (* apply special move *)
  5731.   {$EXTERNALSYM DIBUTTON_ARCADES_SPECIAL}
  5732.   DIBUTTON_ARCADES_SELECT                 = $21000405; (* select special move *)
  5733.   {$EXTERNALSYM DIBUTTON_ARCADES_SELECT}
  5734.   DIBUTTON_ARCADES_MENU                   = $210004FD; (* Show menu options *)
  5735.   {$EXTERNALSYM DIBUTTON_ARCADES_MENU}
  5736. (*--- Priority 2 controls                            ---*)
  5737.  
  5738.   DIHATSWITCH_ARCADES_VIEW                = $21004601; (* scroll view left / right / up / down *)
  5739.   {$EXTERNALSYM DIHATSWITCH_ARCADES_VIEW}
  5740.   DIBUTTON_ARCADES_LEFT_LINK              = $2100C4E4; (* Fallback sidestep left button *)
  5741.   {$EXTERNALSYM DIBUTTON_ARCADES_LEFT_LINK}
  5742.   DIBUTTON_ARCADES_RIGHT_LINK             = $2100C4EC; (* Fallback sidestep right button *)
  5743.   {$EXTERNALSYM DIBUTTON_ARCADES_RIGHT_LINK}
  5744.   DIBUTTON_ARCADES_FORWARD_LINK           = $210144E0; (* Fallback move forward button *)
  5745.   {$EXTERNALSYM DIBUTTON_ARCADES_FORWARD_LINK}
  5746.   DIBUTTON_ARCADES_BACK_LINK              = $210144E8; (* Fallback move back button *)
  5747.   {$EXTERNALSYM DIBUTTON_ARCADES_BACK_LINK}
  5748.   DIBUTTON_ARCADES_VIEW_UP_LINK           = $2107C4E0; (* Fallback scroll view up button *)
  5749.   {$EXTERNALSYM DIBUTTON_ARCADES_VIEW_UP_LINK}
  5750.   DIBUTTON_ARCADES_VIEW_DOWN_LINK         = $2107C4E8; (* Fallback scroll view down button *)
  5751.   {$EXTERNALSYM DIBUTTON_ARCADES_VIEW_DOWN_LINK}
  5752.   DIBUTTON_ARCADES_VIEW_LEFT_LINK         = $2107C4E4; (* Fallback scroll view left button *)
  5753.   {$EXTERNALSYM DIBUTTON_ARCADES_VIEW_LEFT_LINK}
  5754.   DIBUTTON_ARCADES_VIEW_RIGHT_LINK        = $2107C4EC; (* Fallback scroll view right button *)
  5755.   {$EXTERNALSYM DIBUTTON_ARCADES_VIEW_RIGHT_LINK}
  5756.   DIBUTTON_ARCADES_DEVICE                 = $210044FE; (* Show input device and controls *)
  5757.   {$EXTERNALSYM DIBUTTON_ARCADES_DEVICE}
  5758.   DIBUTTON_ARCADES_PAUSE                  = $210044FC; (* Start / Pause / Restart game *)
  5759.   {$EXTERNALSYM DIBUTTON_ARCADES_PAUSE}
  5760.  
  5761. (*--- Arcade - Platform Game
  5762.       Character moves around on screen  ---*)
  5763.   DIVIRTUAL_ARCADE_PLATFORM               = $22000000;
  5764.   {$EXTERNALSYM DIVIRTUAL_ARCADE_PLATFORM}
  5765.   DIAXIS_ARCADEP_LATERAL                  = $22008201; (* Left / right *)
  5766.   {$EXTERNALSYM DIAXIS_ARCADEP_LATERAL}
  5767.   DIAXIS_ARCADEP_MOVE                     = $22010202; (* Up / down *)
  5768.   {$EXTERNALSYM DIAXIS_ARCADEP_MOVE}
  5769.   DIBUTTON_ARCADEP_JUMP                   = $22000401; (* Jump *)
  5770.   {$EXTERNALSYM DIBUTTON_ARCADEP_JUMP}
  5771.   DIBUTTON_ARCADEP_FIRE                   = $22000402; (* Fire *)
  5772.   {$EXTERNALSYM DIBUTTON_ARCADEP_FIRE}
  5773.   DIBUTTON_ARCADEP_CROUCH                 = $22000403; (* Crouch *)
  5774.   {$EXTERNALSYM DIBUTTON_ARCADEP_CROUCH}
  5775.   DIBUTTON_ARCADEP_SPECIAL                = $22000404; (* Apply special move *)
  5776.   {$EXTERNALSYM DIBUTTON_ARCADEP_SPECIAL}
  5777.   DIBUTTON_ARCADEP_SELECT                 = $22000405; (* Select special move *)
  5778.   {$EXTERNALSYM DIBUTTON_ARCADEP_SELECT}
  5779.   DIBUTTON_ARCADEP_MENU                   = $220004FD; (* Show menu options *)
  5780.   {$EXTERNALSYM DIBUTTON_ARCADEP_MENU}
  5781. (*--- Priority 2 controls                            ---*)
  5782.  
  5783.   DIHATSWITCH_ARCADEP_VIEW                = $22004601; (* Scroll view *)
  5784.   {$EXTERNALSYM DIHATSWITCH_ARCADEP_VIEW}
  5785.   DIBUTTON_ARCADEP_FIRESECONDARY          = $22004406; (* Alternative fire button *)
  5786.   {$EXTERNALSYM DIBUTTON_ARCADEP_FIRESECONDARY}
  5787.   DIBUTTON_ARCADEP_LEFT_LINK              = $2200C4E4; (* Fallback sidestep left button *)
  5788.   {$EXTERNALSYM DIBUTTON_ARCADEP_LEFT_LINK}
  5789.   DIBUTTON_ARCADEP_RIGHT_LINK             = $2200C4EC; (* Fallback sidestep right button *)
  5790.   {$EXTERNALSYM DIBUTTON_ARCADEP_RIGHT_LINK}
  5791.   DIBUTTON_ARCADEP_FORWARD_LINK           = $220144E0; (* Fallback move forward button *)
  5792.   {$EXTERNALSYM DIBUTTON_ARCADEP_FORWARD_LINK}
  5793.   DIBUTTON_ARCADEP_BACK_LINK              = $220144E8; (* Fallback move back button *)
  5794.   {$EXTERNALSYM DIBUTTON_ARCADEP_BACK_LINK}
  5795.   DIBUTTON_ARCADEP_VIEW_UP_LINK           = $2207C4E0; (* Fallback scroll view up button *)
  5796.   {$EXTERNALSYM DIBUTTON_ARCADEP_VIEW_UP_LINK}
  5797.   DIBUTTON_ARCADEP_VIEW_DOWN_LINK         = $2207C4E8; (* Fallback scroll view down button *)
  5798.   {$EXTERNALSYM DIBUTTON_ARCADEP_VIEW_DOWN_LINK}
  5799.   DIBUTTON_ARCADEP_VIEW_LEFT_LINK         = $2207C4E4; (* Fallback scroll view left button *)
  5800.   {$EXTERNALSYM DIBUTTON_ARCADEP_VIEW_LEFT_LINK}
  5801.   DIBUTTON_ARCADEP_VIEW_RIGHT_LINK        = $2207C4EC; (* Fallback scroll view right button *)
  5802.   {$EXTERNALSYM DIBUTTON_ARCADEP_VIEW_RIGHT_LINK}
  5803.   DIBUTTON_ARCADEP_DEVICE                 = $220044FE; (* Show input device and controls *)
  5804.   {$EXTERNALSYM DIBUTTON_ARCADEP_DEVICE}
  5805.   DIBUTTON_ARCADEP_PAUSE                  = $220044FC; (* Start / Pause / Restart game *)
  5806.   {$EXTERNALSYM DIBUTTON_ARCADEP_PAUSE}
  5807.  
  5808. (*--- CAD - 2D Object Control
  5809.       Controls to select and move objects in 2D  ---*)
  5810.   DIVIRTUAL_CAD_2DCONTROL                 = $23000000;
  5811.   {$EXTERNALSYM DIVIRTUAL_CAD_2DCONTROL}
  5812.   DIAXIS_2DCONTROL_LATERAL                = $23008201; (* Move view left / right *)
  5813.   {$EXTERNALSYM DIAXIS_2DCONTROL_LATERAL}
  5814.   DIAXIS_2DCONTROL_MOVE                   = $23010202; (* Move view up / down *)
  5815.   {$EXTERNALSYM DIAXIS_2DCONTROL_MOVE}
  5816.   DIAXIS_2DCONTROL_INOUT                  = $23018203; (* Zoom - in / out *)
  5817.   {$EXTERNALSYM DIAXIS_2DCONTROL_INOUT}
  5818.   DIBUTTON_2DCONTROL_SELECT               = $23000401; (* Select Object *)
  5819.   {$EXTERNALSYM DIBUTTON_2DCONTROL_SELECT}
  5820.   DIBUTTON_2DCONTROL_SPECIAL1             = $23000402; (* Do first special operation *)
  5821.   {$EXTERNALSYM DIBUTTON_2DCONTROL_SPECIAL1}
  5822.   DIBUTTON_2DCONTROL_SPECIAL              = $23000403; (* Select special operation *)
  5823.   {$EXTERNALSYM DIBUTTON_2DCONTROL_SPECIAL}
  5824.   DIBUTTON_2DCONTROL_SPECIAL2             = $23000404; (* Do second special operation *)
  5825.   {$EXTERNALSYM DIBUTTON_2DCONTROL_SPECIAL2}
  5826.   DIBUTTON_2DCONTROL_MENU                 = $230004FD; (* Show menu options *)
  5827.   {$EXTERNALSYM DIBUTTON_2DCONTROL_MENU}
  5828. (*--- Priority 2 controls                            ---*)
  5829.  
  5830.   DIHATSWITCH_2DCONTROL_HATSWITCH         = $23004601; (* Hat switch *)
  5831.   {$EXTERNALSYM DIHATSWITCH_2DCONTROL_HATSWITCH}
  5832.   DIAXIS_2DCONTROL_ROTATEZ                = $23024204; (* Rotate view clockwise / counterclockwise *)
  5833.   {$EXTERNALSYM DIAXIS_2DCONTROL_ROTATEZ}
  5834.   DIBUTTON_2DCONTROL_DISPLAY              = $23004405; (* Shows next on-screen display options *)
  5835.   {$EXTERNALSYM DIBUTTON_2DCONTROL_DISPLAY}
  5836.   DIBUTTON_2DCONTROL_DEVICE               = $230044FE; (* Show input device and controls *)
  5837.   {$EXTERNALSYM DIBUTTON_2DCONTROL_DEVICE}
  5838.   DIBUTTON_2DCONTROL_PAUSE                = $230044FC; (* Start / Pause / Restart game *)
  5839.   {$EXTERNALSYM DIBUTTON_2DCONTROL_PAUSE}
  5840.  
  5841. (*--- CAD - 3D object control
  5842.       Controls to select and move objects within a 3D environment  ---*)
  5843.   DIVIRTUAL_CAD_3DCONTROL                 = $24000000;
  5844.   {$EXTERNALSYM DIVIRTUAL_CAD_3DCONTROL}
  5845.   DIAXIS_3DCONTROL_LATERAL                = $24008201; (* Move view left / right *)
  5846.   {$EXTERNALSYM DIAXIS_3DCONTROL_LATERAL}
  5847.   DIAXIS_3DCONTROL_MOVE                   = $24010202; (* Move view up / down *)
  5848.   {$EXTERNALSYM DIAXIS_3DCONTROL_MOVE}
  5849.   DIAXIS_3DCONTROL_INOUT                  = $24018203; (* Zoom - in / out *)
  5850.   {$EXTERNALSYM DIAXIS_3DCONTROL_INOUT}
  5851.   DIBUTTON_3DCONTROL_SELECT               = $24000401; (* Select Object *)
  5852.   {$EXTERNALSYM DIBUTTON_3DCONTROL_SELECT}
  5853.   DIBUTTON_3DCONTROL_SPECIAL1             = $24000402; (* Do first special operation *)
  5854.   {$EXTERNALSYM DIBUTTON_3DCONTROL_SPECIAL1}
  5855.   DIBUTTON_3DCONTROL_SPECIAL              = $24000403; (* Select special operation *)
  5856.   {$EXTERNALSYM DIBUTTON_3DCONTROL_SPECIAL}
  5857.   DIBUTTON_3DCONTROL_SPECIAL2             = $24000404; (* Do second special operation *)
  5858.   {$EXTERNALSYM DIBUTTON_3DCONTROL_SPECIAL2}
  5859.   DIBUTTON_3DCONTROL_MENU                 = $240004FD; (* Show menu options *)
  5860.   {$EXTERNALSYM DIBUTTON_3DCONTROL_MENU}
  5861. (*--- Priority 2 controls                            ---*)
  5862.  
  5863.   DIHATSWITCH_3DCONTROL_HATSWITCH         = $24004601; (* Hat switch *)
  5864.   {$EXTERNALSYM DIHATSWITCH_3DCONTROL_HATSWITCH}
  5865.   DIAXIS_3DCONTROL_ROTATEX                = $24034204; (* Rotate view forward or up / backward or down *)
  5866.   {$EXTERNALSYM DIAXIS_3DCONTROL_ROTATEX}
  5867.   DIAXIS_3DCONTROL_ROTATEY                = $2402C205; (* Rotate view clockwise / counterclockwise *)
  5868.   {$EXTERNALSYM DIAXIS_3DCONTROL_ROTATEY}
  5869.   DIAXIS_3DCONTROL_ROTATEZ                = $24024206; (* Rotate view left / right *)
  5870.   {$EXTERNALSYM DIAXIS_3DCONTROL_ROTATEZ}
  5871.   DIBUTTON_3DCONTROL_DISPLAY              = $24004405; (* Show next on-screen display options *)
  5872.   {$EXTERNALSYM DIBUTTON_3DCONTROL_DISPLAY}
  5873.   DIBUTTON_3DCONTROL_DEVICE               = $240044FE; (* Show input device and controls *)
  5874.   {$EXTERNALSYM DIBUTTON_3DCONTROL_DEVICE}
  5875.   DIBUTTON_3DCONTROL_PAUSE                = $240044FC; (* Start / Pause / Restart game *)
  5876.   {$EXTERNALSYM DIBUTTON_3DCONTROL_PAUSE}
  5877.  
  5878. (*--- CAD - 3D Navigation - Fly through
  5879.       Controls for 3D modeling  ---*)
  5880.   DIVIRTUAL_CAD_FLYBY                     = $25000000;
  5881.   {$EXTERNALSYM DIVIRTUAL_CAD_FLYBY}
  5882.   DIAXIS_CADF_LATERAL                     = $25008201; (* move view left / right *)
  5883.   {$EXTERNALSYM DIAXIS_CADF_LATERAL}
  5884.   DIAXIS_CADF_MOVE                        = $25010202; (* move view up / down *)
  5885.   {$EXTERNALSYM DIAXIS_CADF_MOVE}
  5886.   DIAXIS_CADF_INOUT                       = $25018203; (* in / out *)
  5887.   {$EXTERNALSYM DIAXIS_CADF_INOUT}
  5888.   DIBUTTON_CADF_SELECT                    = $25000401; (* Select Object *)
  5889.   {$EXTERNALSYM DIBUTTON_CADF_SELECT}
  5890.   DIBUTTON_CADF_SPECIAL1                  = $25000402; (* do first special operation *)
  5891.   {$EXTERNALSYM DIBUTTON_CADF_SPECIAL1}
  5892.   DIBUTTON_CADF_SPECIAL                   = $25000403; (* Select special operation *)
  5893.   {$EXTERNALSYM DIBUTTON_CADF_SPECIAL}
  5894.   DIBUTTON_CADF_SPECIAL2                  = $25000404; (* do second special operation *)
  5895.   {$EXTERNALSYM DIBUTTON_CADF_SPECIAL2}
  5896.   DIBUTTON_CADF_MENU                      = $250004FD; (* Show menu options *)
  5897.   {$EXTERNALSYM DIBUTTON_CADF_MENU}
  5898. (*--- Priority 2 controls                            ---*)
  5899.  
  5900.   DIHATSWITCH_CADF_HATSWITCH              = $25004601; (* Hat switch *)
  5901.   {$EXTERNALSYM DIHATSWITCH_CADF_HATSWITCH}
  5902.   DIAXIS_CADF_ROTATEX                     = $25034204; (* Rotate view forward or up / backward or down *)
  5903.   {$EXTERNALSYM DIAXIS_CADF_ROTATEX}
  5904.   DIAXIS_CADF_ROTATEY                     = $2502C205; (* Rotate view clockwise / counterclockwise *)
  5905.   {$EXTERNALSYM DIAXIS_CADF_ROTATEY}
  5906.   DIAXIS_CADF_ROTATEZ                     = $25024206; (* Rotate view left / right *)
  5907.   {$EXTERNALSYM DIAXIS_CADF_ROTATEZ}
  5908.   DIBUTTON_CADF_DISPLAY                   = $25004405; (* shows next on-screen display options *)
  5909.   {$EXTERNALSYM DIBUTTON_CADF_DISPLAY}
  5910.   DIBUTTON_CADF_DEVICE                    = $250044FE; (* Show input device and controls *)
  5911.   {$EXTERNALSYM DIBUTTON_CADF_DEVICE}
  5912.   DIBUTTON_CADF_PAUSE                     = $250044FC; (* Start / Pause / Restart game *)
  5913.   {$EXTERNALSYM DIBUTTON_CADF_PAUSE}
  5914.  
  5915. (*--- CAD - 3D Model Control
  5916.       Controls for 3D modeling  ---*)
  5917.   DIVIRTUAL_CAD_MODEL                     = $26000000;
  5918.   {$EXTERNALSYM DIVIRTUAL_CAD_MODEL}
  5919.   DIAXIS_CADM_LATERAL                     = $26008201; (* move view left / right *)
  5920.   {$EXTERNALSYM DIAXIS_CADM_LATERAL}
  5921.   DIAXIS_CADM_MOVE                        = $26010202; (* move view up / down *)
  5922.   {$EXTERNALSYM DIAXIS_CADM_MOVE}
  5923.   DIAXIS_CADM_INOUT                       = $26018203; (* in / out *)
  5924.   {$EXTERNALSYM DIAXIS_CADM_INOUT}
  5925.   DIBUTTON_CADM_SELECT                    = $26000401; (* Select Object *)
  5926.   {$EXTERNALSYM DIBUTTON_CADM_SELECT}
  5927.   DIBUTTON_CADM_SPECIAL1                  = $26000402; (* do first special operation *)
  5928.   {$EXTERNALSYM DIBUTTON_CADM_SPECIAL1}
  5929.   DIBUTTON_CADM_SPECIAL                   = $26000403; (* Select special operation *)
  5930.   {$EXTERNALSYM DIBUTTON_CADM_SPECIAL}
  5931.   DIBUTTON_CADM_SPECIAL2                  = $26000404; (* do second special operation *)
  5932.   {$EXTERNALSYM DIBUTTON_CADM_SPECIAL2}
  5933.   DIBUTTON_CADM_MENU                      = $260004FD; (* Show menu options *)
  5934.   {$EXTERNALSYM DIBUTTON_CADM_MENU}
  5935. (*--- Priority 2 controls                            ---*)
  5936.  
  5937.   DIHATSWITCH_CADM_HATSWITCH              = $26004601; (* Hat switch *)
  5938.   {$EXTERNALSYM DIHATSWITCH_CADM_HATSWITCH}
  5939.   DIAXIS_CADM_ROTATEX                     = $26034204; (* Rotate view forward or up / backward or down *)
  5940.   {$EXTERNALSYM DIAXIS_CADM_ROTATEX}
  5941.   DIAXIS_CADM_ROTATEY                     = $2602C205; (* Rotate view clockwise / counterclockwise *)
  5942.   {$EXTERNALSYM DIAXIS_CADM_ROTATEY}
  5943.   DIAXIS_CADM_ROTATEZ                     = $26024206; (* Rotate view left / right *)
  5944.   {$EXTERNALSYM DIAXIS_CADM_ROTATEZ}
  5945.   DIBUTTON_CADM_DISPLAY                   = $26004405; (* shows next on-screen display options *)
  5946.   {$EXTERNALSYM DIBUTTON_CADM_DISPLAY}
  5947.   DIBUTTON_CADM_DEVICE                    = $260044FE; (* Show input device and controls *)
  5948.   {$EXTERNALSYM DIBUTTON_CADM_DEVICE}
  5949.   DIBUTTON_CADM_PAUSE                     = $260044FC; (* Start / Pause / Restart game *)
  5950.   {$EXTERNALSYM DIBUTTON_CADM_PAUSE}
  5951.  
  5952. (*--- Control - Media Equipment
  5953.       Remote        ---*)
  5954.   DIVIRTUAL_REMOTE_CONTROL                = $27000000;
  5955.   {$EXTERNALSYM DIVIRTUAL_REMOTE_CONTROL}
  5956.   DIAXIS_REMOTE_SLIDER                    = $27050201; (* Slider for adjustment: volume / color / bass / etc *)
  5957.   {$EXTERNALSYM DIAXIS_REMOTE_SLIDER}
  5958.   DIBUTTON_REMOTE_MUTE                    = $27000401; (* Set volume on current device to zero *)
  5959.   {$EXTERNALSYM DIBUTTON_REMOTE_MUTE}
  5960.   DIBUTTON_REMOTE_SELECT                  = $27000402; (* Next/previous: channel/ track / chapter / picture / station *)
  5961.   {$EXTERNALSYM DIBUTTON_REMOTE_SELECT}
  5962.   DIBUTTON_REMOTE_PLAY                    = $27002403; (* Start or pause entertainment on current device *)
  5963.   {$EXTERNALSYM DIBUTTON_REMOTE_PLAY}
  5964.   DIBUTTON_REMOTE_CUE                     = $27002404; (* Move through current media *)
  5965.   {$EXTERNALSYM DIBUTTON_REMOTE_CUE}
  5966.   DIBUTTON_REMOTE_REVIEW                  = $27002405; (* Move through current media *)
  5967.   {$EXTERNALSYM DIBUTTON_REMOTE_REVIEW}
  5968.   DIBUTTON_REMOTE_CHANGE                  = $27002406; (* Select next device *)
  5969.   {$EXTERNALSYM DIBUTTON_REMOTE_CHANGE}
  5970.   DIBUTTON_REMOTE_RECORD                  = $27002407; (* Start recording the current media *)
  5971.   {$EXTERNALSYM DIBUTTON_REMOTE_RECORD}
  5972.   DIBUTTON_REMOTE_MENU                    = $270004FD; (* Show menu options *)
  5973.   {$EXTERNALSYM DIBUTTON_REMOTE_MENU}
  5974. (*--- Priority 2 controls                            ---*)
  5975.  
  5976.   DIAXIS_REMOTE_SLIDER2                   = $27054202; (* Slider for adjustment: volume *)
  5977.   {$EXTERNALSYM DIAXIS_REMOTE_SLIDER2}
  5978.   DIBUTTON_REMOTE_TV                      = $27005C08; (* Select TV *)
  5979.   {$EXTERNALSYM DIBUTTON_REMOTE_TV}
  5980.   DIBUTTON_REMOTE_CABLE                   = $27005C09; (* Select cable box *)
  5981.   {$EXTERNALSYM DIBUTTON_REMOTE_CABLE}
  5982.   DIBUTTON_REMOTE_CD                      = $27005C0A; (* Select CD player *)
  5983.   {$EXTERNALSYM DIBUTTON_REMOTE_CD}
  5984.   DIBUTTON_REMOTE_VCR                     = $27005C0B; (* Select VCR *)
  5985.   {$EXTERNALSYM DIBUTTON_REMOTE_VCR}
  5986.   DIBUTTON_REMOTE_TUNER                   = $27005C0C; (* Select tuner *)
  5987.   {$EXTERNALSYM DIBUTTON_REMOTE_TUNER}
  5988.   DIBUTTON_REMOTE_DVD                     = $27005C0D; (* Select DVD player *)
  5989.   {$EXTERNALSYM DIBUTTON_REMOTE_DVD}
  5990.   DIBUTTON_REMOTE_ADJUST                  = $27005C0E; (* Enter device adjustment menu *)
  5991.   {$EXTERNALSYM DIBUTTON_REMOTE_ADJUST}
  5992.   DIBUTTON_REMOTE_DIGIT0                  = $2700540F; (* Digit 0 *)
  5993.   {$EXTERNALSYM DIBUTTON_REMOTE_DIGIT0}
  5994.   DIBUTTON_REMOTE_DIGIT1                  = $27005410; (* Digit 1 *)
  5995.   {$EXTERNALSYM DIBUTTON_REMOTE_DIGIT1}
  5996.   DIBUTTON_REMOTE_DIGIT2                  = $27005411; (* Digit 2 *)
  5997.   {$EXTERNALSYM DIBUTTON_REMOTE_DIGIT2}
  5998.   DIBUTTON_REMOTE_DIGIT3                  = $27005412; (* Digit 3 *)
  5999.   {$EXTERNALSYM DIBUTTON_REMOTE_DIGIT3}
  6000.   DIBUTTON_REMOTE_DIGIT4                  = $27005413; (* Digit 4 *)
  6001.   {$EXTERNALSYM DIBUTTON_REMOTE_DIGIT4}
  6002.   DIBUTTON_REMOTE_DIGIT5                  = $27005414; (* Digit 5 *)
  6003.   {$EXTERNALSYM DIBUTTON_REMOTE_DIGIT5}
  6004.   DIBUTTON_REMOTE_DIGIT6                  = $27005415; (* Digit 6 *)
  6005.   {$EXTERNALSYM DIBUTTON_REMOTE_DIGIT6}
  6006.   DIBUTTON_REMOTE_DIGIT7                  = $27005416; (* Digit 7 *)
  6007.   {$EXTERNALSYM DIBUTTON_REMOTE_DIGIT7}
  6008.   DIBUTTON_REMOTE_DIGIT8                  = $27005417; (* Digit 8 *)
  6009.   {$EXTERNALSYM DIBUTTON_REMOTE_DIGIT8}
  6010.   DIBUTTON_REMOTE_DIGIT9                  = $27005418; (* Digit 9 *)
  6011.   {$EXTERNALSYM DIBUTTON_REMOTE_DIGIT9}
  6012.   DIBUTTON_REMOTE_DEVICE                  = $270044FE; (* Show input device and controls *)
  6013.   {$EXTERNALSYM DIBUTTON_REMOTE_DEVICE}
  6014.   DIBUTTON_REMOTE_PAUSE                   = $270044FC; (* Start / Pause / Restart game *)
  6015.   {$EXTERNALSYM DIBUTTON_REMOTE_PAUSE}
  6016.  
  6017. (*--- Control- Web
  6018.       Help or Browser            ---*)
  6019.   DIVIRTUAL_BROWSER_CONTROL               = $28000000;
  6020.   {$EXTERNALSYM DIVIRTUAL_BROWSER_CONTROL}
  6021.   DIAXIS_BROWSER_LATERAL                  = $28008201; (* Move on screen pointer *)
  6022.   {$EXTERNALSYM DIAXIS_BROWSER_LATERAL}
  6023.   DIAXIS_BROWSER_MOVE                     = $28010202; (* Move on screen pointer *)
  6024.   {$EXTERNALSYM DIAXIS_BROWSER_MOVE}
  6025.   DIBUTTON_BROWSER_SELECT                 = $28000401; (* Select current item *)
  6026.   {$EXTERNALSYM DIBUTTON_BROWSER_SELECT}
  6027.   DIAXIS_BROWSER_VIEW                     = $28018203; (* Move view up/down *)
  6028.   {$EXTERNALSYM DIAXIS_BROWSER_VIEW}
  6029.   DIBUTTON_BROWSER_REFRESH                = $28000402; (* Refresh *)
  6030.   {$EXTERNALSYM DIBUTTON_BROWSER_REFRESH}
  6031.   DIBUTTON_BROWSER_MENU                   = $280004FD; (* Show menu options *)
  6032.   {$EXTERNALSYM DIBUTTON_BROWSER_MENU}
  6033. (*--- Priority 2 controls                            ---*)
  6034.  
  6035.   DIBUTTON_BROWSER_SEARCH                 = $28004403; (* Use search tool *)
  6036.   {$EXTERNALSYM DIBUTTON_BROWSER_SEARCH}
  6037.   DIBUTTON_BROWSER_STOP                   = $28004404; (* Cease current update *)
  6038.   {$EXTERNALSYM DIBUTTON_BROWSER_STOP}
  6039.   DIBUTTON_BROWSER_HOME                   = $28004405; (* Go directly to "home" location *)
  6040.   {$EXTERNALSYM DIBUTTON_BROWSER_HOME}
  6041.   DIBUTTON_BROWSER_FAVORITES              = $28004406; (* Mark current site as favorite *)
  6042.   {$EXTERNALSYM DIBUTTON_BROWSER_FAVORITES}
  6043.   DIBUTTON_BROWSER_NEXT                   = $28004407; (* Select Next page *)
  6044.   {$EXTERNALSYM DIBUTTON_BROWSER_NEXT}
  6045.   DIBUTTON_BROWSER_PREVIOUS               = $28004408; (* Select Previous page *)
  6046.   {$EXTERNALSYM DIBUTTON_BROWSER_PREVIOUS}
  6047.   DIBUTTON_BROWSER_HISTORY                = $28004409; (* Show/Hide History *)
  6048.   {$EXTERNALSYM DIBUTTON_BROWSER_HISTORY}
  6049.   DIBUTTON_BROWSER_PRINT                  = $2800440A; (* Print current page *)
  6050.   {$EXTERNALSYM DIBUTTON_BROWSER_PRINT}
  6051.   DIBUTTON_BROWSER_DEVICE                 = $280044FE; (* Show input device and controls *)
  6052.   {$EXTERNALSYM DIBUTTON_BROWSER_DEVICE}
  6053.   DIBUTTON_BROWSER_PAUSE                  = $280044FC; (* Start / Pause / Restart game *)
  6054.   {$EXTERNALSYM DIBUTTON_BROWSER_PAUSE}
  6055.  
  6056. (*--- Driving Simulator - Giant Walking Robot
  6057.       Walking tank with weapons  ---*)
  6058.   DIVIRTUAL_DRIVING_MECHA                 = $29000000;
  6059.   {$EXTERNALSYM DIVIRTUAL_DRIVING_MECHA}
  6060.   DIAXIS_MECHA_STEER                      = $29008201; (* Turns mecha left/right *)
  6061.   {$EXTERNALSYM DIAXIS_MECHA_STEER}
  6062.   DIAXIS_MECHA_TORSO                      = $29010202; (* Tilts torso forward/backward *)
  6063.   {$EXTERNALSYM DIAXIS_MECHA_TORSO}
  6064.   DIAXIS_MECHA_ROTATE                     = $29020203; (* Turns torso left/right *)
  6065.   {$EXTERNALSYM DIAXIS_MECHA_ROTATE}
  6066.   DIAXIS_MECHA_THROTTLE                   = $29038204; (* Engine Speed *)
  6067.   {$EXTERNALSYM DIAXIS_MECHA_THROTTLE}
  6068.   DIBUTTON_MECHA_FIRE                     = $29000401; (* Fire *)
  6069.   {$EXTERNALSYM DIBUTTON_MECHA_FIRE}
  6070.   DIBUTTON_MECHA_WEAPONS                  = $29000402; (* Select next weapon group *)
  6071.   {$EXTERNALSYM DIBUTTON_MECHA_WEAPONS}
  6072.   DIBUTTON_MECHA_TARGET                   = $29000403; (* Select closest enemy available target *)
  6073.   {$EXTERNALSYM DIBUTTON_MECHA_TARGET}
  6074.   DIBUTTON_MECHA_REVERSE                  = $29000404; (* Toggles throttle in/out of reverse *)
  6075.   {$EXTERNALSYM DIBUTTON_MECHA_REVERSE}
  6076.   DIBUTTON_MECHA_ZOOM                     = $29000405; (* Zoom in/out targeting reticule *)
  6077.   {$EXTERNALSYM DIBUTTON_MECHA_ZOOM}
  6078.   DIBUTTON_MECHA_JUMP                     = $29000406; (* Fires jump jets *)
  6079.   {$EXTERNALSYM DIBUTTON_MECHA_JUMP}
  6080.   DIBUTTON_MECHA_MENU                     = $290004FD; (* Show menu options *)
  6081.   {$EXTERNALSYM DIBUTTON_MECHA_MENU}
  6082. (*--- Priority 2 controls                            ---*)
  6083.  
  6084.   DIBUTTON_MECHA_CENTER                   = $29004407; (* Center torso to legs *)
  6085.   {$EXTERNALSYM DIBUTTON_MECHA_CENTER}
  6086.   DIHATSWITCH_MECHA_GLANCE                = $29004601; (* Look around *)
  6087.   {$EXTERNALSYM DIHATSWITCH_MECHA_GLANCE}
  6088.   DIBUTTON_MECHA_VIEW                     = $29004408; (* Cycle through view options *)
  6089.   {$EXTERNALSYM DIBUTTON_MECHA_VIEW}
  6090.   DIBUTTON_MECHA_FIRESECONDARY            = $29004409; (* Alternative fire button *)
  6091.   {$EXTERNALSYM DIBUTTON_MECHA_FIRESECONDARY}
  6092.   DIBUTTON_MECHA_LEFT_LINK                = $2900C4E4; (* Fallback steer left button *)
  6093.   {$EXTERNALSYM DIBUTTON_MECHA_LEFT_LINK}
  6094.   DIBUTTON_MECHA_RIGHT_LINK               = $2900C4EC; (* Fallback steer right button *)
  6095.   {$EXTERNALSYM DIBUTTON_MECHA_RIGHT_LINK}
  6096.   DIBUTTON_MECHA_FORWARD_LINK             = $290144E0; (* Fallback tilt torso forward button *)
  6097.   {$EXTERNALSYM DIBUTTON_MECHA_FORWARD_LINK}
  6098.   DIBUTTON_MECHA_BACK_LINK                = $290144E8; (* Fallback tilt toroso backward button *)
  6099.   {$EXTERNALSYM DIBUTTON_MECHA_BACK_LINK}
  6100.   DIBUTTON_MECHA_ROTATE_LEFT_LINK         = $290244E4; (* Fallback rotate toroso right button *)
  6101.   {$EXTERNALSYM DIBUTTON_MECHA_ROTATE_LEFT_LINK}
  6102.   DIBUTTON_MECHA_ROTATE_RIGHT_LINK        = $290244EC; (* Fallback rotate torso left button *)
  6103.   {$EXTERNALSYM DIBUTTON_MECHA_ROTATE_RIGHT_LINK}
  6104.   DIBUTTON_MECHA_FASTER_LINK              = $2903C4E0; (* Fallback increase engine speed *)
  6105.   {$EXTERNALSYM DIBUTTON_MECHA_FASTER_LINK}
  6106.   DIBUTTON_MECHA_SLOWER_LINK              = $2903C4E8; (* Fallback decrease engine speed *)
  6107.   {$EXTERNALSYM DIBUTTON_MECHA_SLOWER_LINK}
  6108.   DIBUTTON_MECHA_DEVICE                   = $290044FE; (* Show input device and controls *)
  6109.   {$EXTERNALSYM DIBUTTON_MECHA_DEVICE}
  6110.   DIBUTTON_MECHA_PAUSE                    = $290044FC; (* Start / Pause / Restart game *)
  6111.   {$EXTERNALSYM DIBUTTON_MECHA_PAUSE}
  6112.  
  6113. (*
  6114.  *  "ANY" semantics can be used as a last resort to get mappings for actions
  6115.  *  that match nothing in the chosen virtual genre.  These semantics will be
  6116.  *  mapped at a lower priority that virtual genre semantics.  Also, hardware
  6117.  *  vendors will not be able to provide sensible mappings for these unless
  6118.  *  they provide application specific mappings.
  6119.  *)
  6120.   DIAXIS_ANY_X_1                          = $FF00C201;
  6121.   {$EXTERNALSYM DIAXIS_ANY_X_1}
  6122.   DIAXIS_ANY_X_2                          = $FF00C202;
  6123.   {$EXTERNALSYM DIAXIS_ANY_X_2}
  6124.   DIAXIS_ANY_Y_1                          = $FF014201;
  6125.   {$EXTERNALSYM DIAXIS_ANY_Y_1}
  6126.   DIAXIS_ANY_Y_2                          = $FF014202;
  6127.   {$EXTERNALSYM DIAXIS_ANY_Y_2}
  6128.   DIAXIS_ANY_Z_1                          = $FF01C201;
  6129.   {$EXTERNALSYM DIAXIS_ANY_Z_1}
  6130.   DIAXIS_ANY_Z_2                          = $FF01C202;
  6131.   {$EXTERNALSYM DIAXIS_ANY_Z_2}
  6132.   DIAXIS_ANY_R_1                          = $FF024201;
  6133.   {$EXTERNALSYM DIAXIS_ANY_R_1}
  6134.   DIAXIS_ANY_R_2                          = $FF024202;
  6135.   {$EXTERNALSYM DIAXIS_ANY_R_2}
  6136.   DIAXIS_ANY_U_1                          = $FF02C201;
  6137.   {$EXTERNALSYM DIAXIS_ANY_U_1}
  6138.   DIAXIS_ANY_U_2                          = $FF02C202;
  6139.   {$EXTERNALSYM DIAXIS_ANY_U_2}
  6140.   DIAXIS_ANY_V_1                          = $FF034201;
  6141.   {$EXTERNALSYM DIAXIS_ANY_V_1}
  6142.   DIAXIS_ANY_V_2                          = $FF034202;
  6143.   {$EXTERNALSYM DIAXIS_ANY_V_2}
  6144.   DIAXIS_ANY_A_1                          = $FF03C201;
  6145.   {$EXTERNALSYM DIAXIS_ANY_A_1}
  6146.   DIAXIS_ANY_A_2                          = $FF03C202;
  6147.   {$EXTERNALSYM DIAXIS_ANY_A_2}
  6148.   DIAXIS_ANY_B_1                          = $FF044201;
  6149.   {$EXTERNALSYM DIAXIS_ANY_B_1}
  6150.   DIAXIS_ANY_B_2                          = $FF044202;
  6151.   {$EXTERNALSYM DIAXIS_ANY_B_2}
  6152.   DIAXIS_ANY_C_1                          = $FF04C201;
  6153.   {$EXTERNALSYM DIAXIS_ANY_C_1}
  6154.   DIAXIS_ANY_C_2                          = $FF04C202;
  6155.   {$EXTERNALSYM DIAXIS_ANY_C_2}
  6156.   DIAXIS_ANY_S_1                          = $FF054201;
  6157.   {$EXTERNALSYM DIAXIS_ANY_S_1}
  6158.   DIAXIS_ANY_S_2                          = $FF054202;
  6159.   {$EXTERNALSYM DIAXIS_ANY_S_2}
  6160.  
  6161.   DIAXIS_ANY_1                            = $FF004201;
  6162.   {$EXTERNALSYM DIAXIS_ANY_1}
  6163.   DIAXIS_ANY_2                            = $FF004202;
  6164.   {$EXTERNALSYM DIAXIS_ANY_2}
  6165.   DIAXIS_ANY_3                            = $FF004203;
  6166.   {$EXTERNALSYM DIAXIS_ANY_3}
  6167.   DIAXIS_ANY_4                            = $FF004204;
  6168.   {$EXTERNALSYM DIAXIS_ANY_4}
  6169.  
  6170.   DIPOV_ANY_1                             = $FF004601;
  6171.   {$EXTERNALSYM DIPOV_ANY_1}
  6172.   DIPOV_ANY_2                             = $FF004602;
  6173.   {$EXTERNALSYM DIPOV_ANY_2}
  6174.   DIPOV_ANY_3                             = $FF004603;
  6175.   {$EXTERNALSYM DIPOV_ANY_3}
  6176.   DIPOV_ANY_4                             = $FF004604;
  6177.   {$EXTERNALSYM DIPOV_ANY_4}
  6178.  
  6179. // #define DIBUTTON_ANY(instance)                  ( 0xFF004400 | instance )
  6180. function DIBUTTON_ANY(instance: Cardinal): Cardinal;
  6181. {$EXTERNALSYM DIBUTTON_ANY}
  6182.  
  6183.  
  6184.  
  6185. (****************************************************************************
  6186.  *
  6187.  *  Definitions for non-IDirectInput (VJoyD) features defined more recently
  6188.  *  than the current sdk files
  6189.  *
  6190.  ****************************************************************************)
  6191.  
  6192. //#ifdef _INC_MMSYSTEM
  6193. //#ifndef MMNOJOY
  6194.  
  6195. //#ifndef __VJOYDX_INCLUDED__
  6196. //#define __VJOYDX_INCLUDED__
  6197.  
  6198. const
  6199. (*
  6200.  * Flag to indicate that the dwReserved2 field of the JOYINFOEX structure
  6201.  * contains mini-driver specific data to be passed by VJoyD to the mini-
  6202.  * driver instead of doing a poll.
  6203.  *)
  6204.   JOY_PASSDRIVERDATA          = $10000000;
  6205.   {$EXTERNALSYM JOY_PASSDRIVERDATA}
  6206.  
  6207. (*
  6208.  * Informs the joystick driver that the configuration has been changed
  6209.  * and should be reloaded from the registery.
  6210.  * dwFlags is reserved and should be set to zero
  6211.  *)
  6212. const
  6213.   WinMMDll = 'WinMM.dll';
  6214. {$IFDEF DIRECTINPUT_DYNAMIC_LINK}
  6215. var
  6216.   joyConfigChanged: function(dwFlags: DWORD): MMRESULT; stdcall;
  6217. {$ELSE}
  6218. function joyConfigChanged(dwFlags: DWORD): MMRESULT; stdcall; external WinMMDll;
  6219. {$ENDIF}
  6220. {$EXTERNALSYM joyConfigChanged}
  6221.  
  6222. (*
  6223.  * Invoke the joystick control panel directly, using the passed window handle
  6224.  * as the parent of the dialog.  This API is only supported for compatibility
  6225.  * purposes; new applications should use the RunControlPanel method of a
  6226.  * device interface for a game controller.
  6227.  * The API is called by using the function pointer returned by
  6228.  * GetProcAddress( hCPL, TEXT("ShowJoyCPL") ) where hCPL is a HMODULE returned
  6229.  * by LoadLibrary( TEXT("joy.cpl") ).  The typedef is provided to allow
  6230.  * declaration and casting of an appropriately typed variable.
  6231.  *)
  6232. const
  6233.   JoyCPL = 'joy.cpl';
  6234. type
  6235.   TShowJoyCPL =  procedure(hWnd: HWND); stdcall;
  6236. {$IFDEF DIRECTINPUT_DYNAMIC_LINK}
  6237. var
  6238.   ShowJoyCPL: TShowJoyCPL;
  6239. {$ELSE}
  6240. procedure ShowJoyCPL(hWnd: HWND); stdcall; external JoyCPL;
  6241. {$ENDIF}
  6242. {$EXTERNALSYM ShowJoyCPL}
  6243.  
  6244. const
  6245. (*
  6246.  * Hardware Setting indicating that the device is a headtracker
  6247.  *)
  6248.   JOY_HWS_ISHEADTRACKER       = $02000000;
  6249.   {$EXTERNALSYM JOY_HWS_ISHEADTRACKER}
  6250.  
  6251. (*
  6252.  * Hardware Setting indicating that the VxD is used to replace
  6253.  * the standard analog polling
  6254.  *)
  6255.   JOY_HWS_ISGAMEPORTDRIVER    = $04000000;
  6256.   {$EXTERNALSYM JOY_HWS_ISGAMEPORTDRIVER}
  6257.  
  6258. (*
  6259.  * Hardware Setting indicating that the driver needs a standard
  6260.  * gameport in order to communicate with the device.
  6261.  *)
  6262.   JOY_HWS_ISANALOGPORTDRIVER  = $08000000;
  6263.   {$EXTERNALSYM JOY_HWS_ISANALOGPORTDRIVER}
  6264.  
  6265. (*
  6266.  * Hardware Setting indicating that VJoyD should not load this
  6267.  * driver, it will be loaded externally and will register with
  6268.  * VJoyD of it's own accord.
  6269.  *)
  6270.   JOY_HWS_AUTOLOAD            = $10000000;
  6271.   {$EXTERNALSYM JOY_HWS_AUTOLOAD}
  6272.  
  6273. (*
  6274.  * Hardware Setting indicating that the driver acquires any
  6275.  * resources needed without needing a devnode through VJoyD.
  6276.  *)
  6277.   JOY_HWS_NODEVNODE           = $20000000;
  6278.   {$EXTERNALSYM JOY_HWS_NODEVNODE}
  6279.  
  6280.  
  6281. (*
  6282.  * Hardware Setting indicating that the device is a gameport bus
  6283.  *)
  6284.   JOY_HWS_ISGAMEPORTBUS       = $80000000;
  6285.   {$EXTERNALSYM JOY_HWS_ISGAMEPORTBUS}
  6286.   JOY_HWS_GAMEPORTBUSBUSY     = $00000001;
  6287.   {$EXTERNALSYM JOY_HWS_GAMEPORTBUSBUSY}
  6288.  
  6289. (*
  6290.  * Usage Setting indicating that the settings are volatile and
  6291.  * should be removed if still present on a reboot.
  6292.  *)
  6293.   JOY_US_VOLATILE             = $00000008;
  6294.   {$EXTERNALSYM JOY_US_VOLATILE}
  6295.  
  6296. //#endif  (* __VJOYDX_INCLUDED__ *)
  6297.  
  6298. //#endif  (* not MMNOJOY *)
  6299. //#endif  (* _INC_MMSYSTEM *)
  6300.  
  6301. (****************************************************************************
  6302.  *
  6303.  *  Definitions for non-IDirectInput (VJoyD) features defined more recently
  6304.  *  than the current ddk files
  6305.  *
  6306.  ****************************************************************************)
  6307.  
  6308. //#ifdef _INC_MMDDK
  6309. //#ifndef MMNOJOYDEV
  6310.  
  6311. //#ifndef __VJOYDXD_INCLUDED__
  6312. //#define __VJOYDXD_INCLUDED__
  6313.  
  6314. const
  6315. (*
  6316.  * Poll type in which the do_other field of the JOYOEMPOLLDATA
  6317.  * structure contains mini-driver specific data passed from an app.
  6318.  *)
  6319.   JOY_OEMPOLL_PASSDRIVERDATA  = 7;
  6320.   {$EXTERNALSYM JOY_OEMPOLL_PASSDRIVERDATA}
  6321.  
  6322. //#endif  (* __VJOYDXD_INCLUDED__ *)
  6323.  
  6324. //#endif  (* not MMNOJOYDEV *)
  6325. //#endif  (* _INC_MMDDK *)
  6326.  
  6327. implementation
  6328.  
  6329. //#define DIEFT_GETTYPE(n)            LOBYTE(n)
  6330. function DIEFT_GETTYPE(n: Cardinal): Byte;
  6331. begin
  6332.   Result := LOBYTE(n);
  6333. end;
  6334.  
  6335. // #define GET_DIDEVICE_TYPE(dwDevType)    LOBYTE(dwDevType)
  6336. function GET_DIDEVICE_TYPE(dwDevType: DWORD): Byte;
  6337. begin
  6338.   Result := LOBYTE(dwDevType);
  6339. end;
  6340.  
  6341. // #define GET_DIDEVICE_SUBTYPE(dwDevType) HIBYTE(dwDevType)
  6342. function GET_DIDEVICE_SUBTYPE(dwDevType: DWORD): Byte;
  6343. begin
  6344.   Result := HiByte(Word(dwDevType));
  6345. end;
  6346.  
  6347. // #define DIDFT_MAKEINSTANCE(n) ((WORD)(n) << 8)
  6348. function DIDFT_MAKEINSTANCE(n: Cardinal): Cardinal;
  6349. begin
  6350.   Result := Word(n) shl 8;
  6351. end;
  6352.  
  6353. // #define DIDFT_GETTYPE(n)     LOBYTE(n)
  6354. function DIDFT_GETTYPE(n: Cardinal): Byte;
  6355. begin
  6356.   Result := LOBYTE(n);
  6357. end;
  6358.  
  6359. // #define DIDFT_GETINSTANCE(n) LOWORD((n) >> 8)
  6360. function DIDFT_GETINSTANCE(n: Cardinal): Cardinal;
  6361. begin
  6362.   Result := LOWORD(n) shr 8;
  6363. end;
  6364.  
  6365. // #define DIDFT_ENUMCOLLECTION(n) ((WORD)(n) << 8)
  6366. function DIDFT_ENUMCOLLECTION(n: Cardinal): Cardinal;
  6367. begin
  6368.   Result := Word(n) shl 8;
  6369. end;
  6370.  
  6371. {$IFDEF DIRECTINPUT_VERSION_5b} (* #if(DIRECTINPUT_VERSION >= 0x050a) *)
  6372. // #define DIMAKEUSAGEDWORD(UsagePage, Usage) \
  6373. //                                 (DWORD)MAKELONG(Usage, UsagePage)
  6374. function DIMAKEUSAGEDWORD(UsagePage, Usage: Word): DWORD;
  6375. begin
  6376.   Result:= DWORD(MakeLong(UsagePage, Usage));
  6377. end;
  6378. {$ENDIF} (* DIRECTINPUT_VERSION >= 0x050a *)
  6379.  
  6380. //  #define DIJOFS_SLIDER(n)   (FIELD_OFFSET(DIJOYSTATE, rglSlider) + \
  6381. //                              (n) * sizeof(LONG))
  6382. function DIJOFS_SLIDER(n: Cardinal): Cardinal;
  6383. begin
  6384.   Result := Cardinal(@PDIJoyState(nil)^.rglSlider) + n*SizeOf(DWORD); //  + 24;
  6385. end;
  6386.  
  6387. // #define DIJOFS_POV(n)      (FIELD_OFFSET(DIJOYSTATE, rgdwPOV) + \
  6388. //                              (n) * sizeof(DWORD))
  6389. function DIJOFS_POV(n: Cardinal): Cardinal;
  6390. begin
  6391.   Result := Cardinal(@PDIJoyState(nil).rgdwPOV) + n*SizeOf(DWORD); //  + 32;
  6392. end;
  6393.  
  6394. // #define DIJOFS_BUTTON(n)   (FIELD_OFFSET(DIJOYSTATE, rgbButtons) + (n))
  6395. function DIJOFS_BUTTON(n: Cardinal): Cardinal;
  6396. begin
  6397.   Result := Cardinal(@PDIJoyState(nil).rgbButtons) + n*SizeOf(DWORD); //  + 48;
  6398. end;
  6399.  
  6400. // #define DIBUTTON_ANY(instance)                  ( 0xFF004400 | instance )
  6401. function DIBUTTON_ANY(instance: Cardinal): Cardinal;
  6402. begin
  6403.   Result := $FF004400 or instance;
  6404. end;
  6405.  
  6406.  
  6407. {$IFDEF DIRECTINPUT_DYNAMIC_LINK}
  6408. var
  6409.   DirectInputLib: THandle = 0;
  6410.   DirectInput8Lib: THandle = 0;
  6411.   WinMMLib: THandle = 0;
  6412.   JoyCPLLib: THandle = 0;
  6413.  
  6414. function DirectInputLoaded: Boolean;
  6415. begin
  6416.   Result:= (DirectInputLib <> 0) and (DirectInput8Lib<>0);
  6417. end;
  6418.  
  6419. function UnLoadDirectInput: Boolean;
  6420. begin
  6421.   Result:= True;
  6422.   if (DirectInputLib <> 0) then
  6423.   begin
  6424.     Result:= Result and FreeLibrary(DirectInputLib);
  6425.     DirectInputCreateA:= nil;
  6426.     DirectInputCreateW:= nil;
  6427.     DirectInputCreate:= nil;
  6428.  
  6429.     DirectInputCreateEx:= nil;
  6430.     DirectInputLib:= 0;
  6431.   end;
  6432.  
  6433.   if (DirectInput8Lib <> 0) then
  6434.   begin
  6435.     Result:= Result and FreeLibrary(DirectInput8Lib);
  6436.     DirectInput8Create:= nil;
  6437.     DirectInput8Lib:= 0;
  6438.   end;
  6439.  
  6440.   if (WinMMLib <> 0) then
  6441.   begin
  6442.     Result:= Result and FreeLibrary(WinMMLib);
  6443.     joyConfigChanged:= nil;
  6444.     WinMMLib:= 0;
  6445.   end;
  6446.  
  6447.   if (JoyCPLLib <> 0) then
  6448.   begin
  6449.     Result:= Result and FreeLibrary(JoyCPLLib);
  6450.     ShowJoyCPL:= nil;
  6451.     JoyCPLLib:= 0;
  6452.   end;
  6453. end;
  6454.  
  6455. function LoadDirectInput: Boolean;
  6456. begin
  6457.   Result:= DirectInputLoaded;
  6458.   if (not Result) then
  6459.   begin
  6460.     DirectInputLib:= LoadLibrary(DirectInputDll);
  6461.     if (DirectInputLib<>0) then
  6462.     begin
  6463.       DirectInputCreateA:= GetProcAddress(DirectInputLib, 'DirectInputCreateA');
  6464.       DirectInputCreateW:= GetProcAddress(DirectInputLib, 'DirectInputCreateW');
  6465.       {$IFDEF UNICODE}
  6466.       DirectInputCreate:= GetProcAddress(DirectInputLib, 'DirectInputCreateW');
  6467.       {$ELSE}
  6468.       DirectInputCreate:= GetProcAddress(DirectInputLib, 'DirectInputCreateA');
  6469.       {$ENDIF}
  6470.  
  6471.       DirectInputCreateEx:= GetProcAddress(DirectInputLib, 'DirectInputCreateEx');
  6472.     end;
  6473.  
  6474.     DirectInput8Lib:= LoadLibrary(DirectInput8Dll);
  6475.     if (DirectInput8Lib<>0) then
  6476.     begin
  6477.       DirectInput8Create:= GetProcAddress(DirectInputLib, 'DirectInput8Create');
  6478.     end;
  6479.  
  6480.     WinMMLib:= LoadLibrary(WinMMDll);
  6481.     if (WinMMLib <> 0) then
  6482.     begin
  6483.       joyConfigChanged:= GetProcAddress(WinMMLib, 'joyConfigChanged');
  6484.     end;
  6485.  
  6486.     JoyCPLLib:= LoadLibrary(JoyCPL);
  6487.     if (JoyCPLLib <> 0) then
  6488.     begin
  6489.       ShowJoyCPL:= GetProcAddress(JoyCPLLib, 'ShowJoyCPL');
  6490.     end;
  6491.  
  6492.     // At least basic procedure is found!
  6493.     Result:= Assigned(DirectInputCreate) or Assigned(DirectInput8Create);
  6494.     if not Result then UnLoadDirectInput;
  6495.   end;
  6496. end;
  6497. {$ELSE}
  6498. function DirectInputLoaded: Boolean;
  6499. begin // Stub function for static linking
  6500.   Result:= True;
  6501. end;
  6502.  
  6503. function UnLoadDirectInput: Boolean;
  6504. begin // Stub function for static linking
  6505.   Result:= True; // should emulate "normal" behaviour
  6506. end;
  6507.  
  6508. function LoadDirectInput: Boolean;
  6509. begin // Stub function for static linking
  6510.   Result:= True;
  6511. end;
  6512.  
  6513. {$ENDIF}
  6514.  
  6515. {$IFDEF DIRECTINPUT_DYNAMIC_LINK}
  6516. initialization
  6517. {$IFNDEF DIRECTINPUT_DYNAMIC_LINK_EXPLICIT}
  6518.   LoadDirectInput;
  6519. {$ENDIF}
  6520. finalization
  6521.   UnLoadDirectInput;
  6522. {$ENDIF}
  6523. end.
  6524.  
  6525.